Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

Tu explorador no es compatible

Debes actualizar tu explorador para usar el sitio.

Actualiza a la versión más reciente de Internet Explorer

INFORMACIÓN: Llamar A rutinas de CRT resultados desde una aplicación GUI

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 105305
Resumen
Para utilizar rutinas de salida de tiempo de ejecución C, como printf() desde una aplicación GUI, es necesario crear una consola. La interfaz de programación de aplicaciones de Win32 (API) AllocConsole() crea la consola. El setvbuf() rutina CRT quita el búfer de forma que salida es visible inmediatamente.

Este método funciona si la aplicación de GUI se ejecuta desde la línea de comandos o desde Administrador de archivos. Sin embargo, este método no funciona si la aplicación se inicia desde el Administrador de programas o mediante el comando "start". El código siguiente muestra cómo evitar este problema:
   int hCrt;   FILE *hf;   AllocConsole();   hCrt = _open_osfhandle(             (long) GetStdHandle(STD_OUTPUT_HANDLE),             _O_TEXT          );   hf = _fdopen( hCrt, "w" );   *stdout = *hf;   i = setvbuf( stdout, NULL, _IONBF, 0 );				
este código abre un identificador de CRT de bajo nivel nuevo para el identificador de salida de consola correcta, asocia una nueva secuencia ese controlador de bajo nivel y reemplaza stdout con esa nueva secuencia. Este proceso se encarga de funciones que utilizan stdout, como printf() puts() y así sucesivamente. Utilice el mismo procedimiento para stdin y stderr.

Tenga en cuenta que este código no corrige los problemas con controladores de 0, 1 y 2. De hecho, debido a otras complicaciones, no es posible corregir este problema y, por lo tanto, es necesario utilizar E/s de secuencia en lugar de E/s de bajo nivel.
Más información
Cuando una aplicación GUI se inicia con la "start"comando, el sistema operativo estándar tres controla STD_INPUT_HANDLE STD_OUTPUT_HANDLE y STD_ERROR_HANDLE son todos"ceros" las rutinas de inicialización de la consola. Estos tres identificadores se reemplazan por los valores válidos cuando la aplicación de GUI llama a AllocConsole(). Por lo tanto, una vez hecho esto, llamar a GetStdHandle() devolverá siempre los valores de identificador válido. El problema es que el CRT ya ha completado la inicialización antes de la aplicación obtiene una oportunidad para llamar a AllocConsole(); los tres controladores de E/s bajos 0, 1 y 2 ya se han configurado para utilizar el original cero identificadores de sistema operativo, por lo que todas las E/s de CRT se envía a identificadores de sistema operativo no válidos y salida de CRT no aparece en la consola. Utilizar la solución descrita anteriormente para eliminar este problema.

En el caso de iniciar la aplicación de GUI desde la línea de comandos sin el comando "start", los controladores de sistema operativo estándar son no correctamente ceros pero incorrectamente se heredan desde cmd.exe. Cuando se inicializa el CRT de la aplicación, se inicializan los tres controladores de E/s bajos 0, 1 y 2 para utilizar los números de tres identificador que hereda de la aplicación de cmd.exe. Cuando la aplicación llama a AllocConsole(), las rutinas de inicialización de la consola intentarán reemplazar lo que considera la inicialización de consola que no es válidos valores de identificador OS estándar con valores de identificador válido de la nueva consola. Por casualidad, ya que las rutinas de inicialización de la consola tienden a los mismos tres valores para los identificadores de sistema operativo estándar, la inicialización de la consola reemplazará los valores de identificador de sistema operativo estándar con los mismos valores que hay antes--los heredados de cmd.exe. Por lo tanto, E/s de CRT funciona en este caso.

Es importante tener en cuenta que la posibilidad de utilizar CRT rutinas desde una aplicación GUI ejecutar desde la línea de comandos no por diseño por lo que esto puede no funciona en futuras versiones de Windows NT o Windows. En una versión futura, puede necesitar la solución no sólo para las aplicaciones iniciadas en la línea de comandos con "inicio < nombre de aplicación >", pero también para las aplicaciones iniciadas en la línea de comandos con "nombre de aplicación".
3.10 3.50 CRT redirigir std controladores

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 105305 - Última revisión: 11/21/2006 15:41:01 - Revisión: 4.2

  • Microsoft Win32 Application Programming Interface
  • kbmt kbconsole kbinfo kbkernbase KB105305 KbMtes
Comentarios