Tengo un proyecto win32 que cargué en Visual Studio 2005. Me gustaría poder imprimir cosas en la ventana de salida de Visual Studio, pero no puedo por mi vida averiguar cómo. Probé 'printf' y 'cout <<' pero mis mensajes permanecen obstinadamente sin imprimir.
¿Existe alguna forma especial de imprimir en la ventana de salida de Visual Studio?
Respuestas:
Puede utilizar
OutputDebugString
.OutputDebugString
es una macro que, según sus opciones de compilación, se asigna aOutputDebugStringA(char const*)
oOutputDebugStringW(wchar_t const*)
. En el último caso, deberá proporcionar una cadena de caracteres amplia a la función. Para crear un literal de carácter amplio, puede usar elL
prefijo:Normalmente, usará la versión macro junto con la
_T
macro de esta manera:Si su proyecto está configurado para compilar para UNICODE, se expandirá a:
Si no está construyendo para UNICODE, se expandirá a:
fuente
myStr
. ¿Eschar*
,wchar_t*
oLPTSTR
? Suponiendo quechar*
simplemente llameOutputDebugStringA(myStr)
o useOutputDebugStringW
conwchar_t*
yOutputDebugString
conLPTSTR
como se explica en mi respuesta.OutputDebugString
y defina los símbolos de preprocesador apropiados para que coincidan con el ancho de los caracteres que usa o elija los tipos flexibles de "T" que le permiten compilar caracteres de 8 y 16 bits.Si el proyecto es un proyecto de GUI, no aparecerá ninguna consola. Para cambiar el proyecto a uno de consola, debe ir al panel de propiedades del proyecto y configurar:
Esta solución solo funciona si tenía el punto de entrada clásico " int main () ".
Pero si eres como en mi caso (un proyecto openGL), no necesitas editar las propiedades, ya que esto funciona mejor:
printf y cout funcionarán como de costumbre.
Si llama a AllocConsole antes de la creación de una ventana, la consola aparecerá detrás de la ventana, si la llama después, aparecerá adelante.
Actualizar
freopen
está en desuso y puede no ser seguro. Utilice en sufreopen_s
lugar:fuente
EDITBIN
puede configurar el subsistemaCONSOLE
incluso si está utilizando enWinMain
lugar deint main()
.Para imprimir en la
real
consola, debe hacerla visible mediante el indicador del vinculador/SUBSYSTEM:CONSOLE
. La ventana adicional de la consola es molesta, pero para fines de depuración es muy valiosa.OutputDebugString
se imprime en la salida del depurador cuando se ejecuta dentro del depurador.fuente
Considere usar las macros de tiempo de ejecución de VC ++ para informar _RPT N () y _RPTF N ()
Ejemplo...
O puede usar las funciones de tiempo de ejecución de VC ++ _CrtDbgReport, _CrtDbgReportW directamente.
fuente
_RPTF0
se puede usar donde no se espera que se pasen variables después de la cadena de formato. La_RPTFN
macro, por otro lado, requiere al menos un argumento después de la cadena de formato.Si desea imprimir variables decimales:
fuente
Si necesita ver la salida de un programa existente que usó ampliamente printf sin cambiar el código (o con cambios mínimos), puede redefinir printf de la siguiente manera y agregarlo al encabezado común (stdafx.h).
fuente
Es probable que su proyecto Win32 sea un proyecto de GUI, no un proyecto de consola. Esto provoca una diferencia en el encabezado ejecutable. Como resultado, su proyecto de GUI será responsable de abrir su propia ventana. Sin embargo, esa puede ser una ventana de consola. Llame
AllocConsole()
para crearlo y utilice las funciones de la consola Win32 para escribir en él.fuente
Estaba buscando una forma de hacerlo yo mismo y descubrí una solución simple.
Supongo que inició un proyecto Win32 predeterminado (aplicación de Windows) en Visual Studio, que proporciona una función "WinMain". De forma predeterminada, Visual Studio establece el punto de entrada en "SUBSYSTEM: WINDOWS". Primero debe cambiar esto yendo a:
Proyecto -> Propiedades -> Vinculador -> Sistema -> Subsistema
Y seleccione "Consola (/ SUBSYSTEM: CONSOLE)" de la lista desplegable.
Ahora, el programa no se ejecutará, ya que se necesita una función "principal" en lugar de la función "WinMain".
Así que ahora puede agregar una función "principal" como lo haría normalmente en C ++. Después de esto, para iniciar el programa GUI, puede llamar a la función "WinMain" desde dentro de la función "principal".
La parte inicial de su programa ahora debería verse así:
Resultado de mi implementación
Ahora puede usar funciones para enviar a la consola en cualquier parte de su programa GUI para depuración u otros propósitos.
fuente
También puede utilizar el método WriteConsole para imprimir en la consola.
fuente