c - ventana - immediate window visual studio 2017
¿Cómo ver la salida de printf en una aplicación Win32 en Visual Studio 2010? (6)
¿Cómo puede ver la salida de printf en una aplicación Win32 (ingresando con un WinMain) en Visual Studio 2010 ?
Gracias Torak por tu respuesta. Me ayudó mucho.
Necesitaba un búfer de desplazamiento más grande así que hice algunas adiciones después de echar un vistazo a las funciones de la API . Compartido aquí en caso de que ayude a alguien más:
void SetStdOutToNewConsole()
{
// allocate a console for this app
AllocConsole();
// redirect unbuffered STDOUT to the console
HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
int fileDescriptor = _open_osfhandle((intptr_t)consoleHandle, _O_TEXT);
FILE *fp = _fdopen( fileDescriptor, "w" );
*stdout = *fp;
setvbuf( stdout, NULL, _IONBF, 0 );
// give the console window a nicer title
SetConsoleTitle(L"Debug Output");
// give the console window a bigger buffer size
CONSOLE_SCREEN_BUFFER_INFO csbi;
if ( GetConsoleScreenBufferInfo(consoleHandle, &csbi) )
{
COORD bufferSize;
bufferSize.X = csbi.dwSize.X;
bufferSize.Y = 9999;
SetConsoleScreenBufferSize(consoleHandle, bufferSize);
}
}
Esto aumenta la altura de retroceso (búfer de pantalla) a 9999 líneas.
Probado en Windows XP y Windows 7.
Necesitarás una ventana de consola. Con mucho, la forma más fácil de obtener una es cambiar una opción de vinculador: Proyecto + Propiedades, Vinculador, Sistema, Subsistema = Consola. Añadir un método main ():
int main() {
return _tWinMain(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW);
}
Otra forma que no requeriría cambiar las impresoras existentes y también imprimir en la ventana de salida de VS sería algo como esto:
#define printf printf2
int __cdecl printf2(const char *format, ...)
{
char str[1024];
va_list argptr;
va_start(argptr, format);
int ret = vsnprintf(str, sizeof(str), format, argptr);
va_end(argptr);
OutputDebugStringA(str);
return ret;
}
...
printf("remains %s", "the same");
Sé que he hecho esto en el pasado utilizando la función AllocConsole , pero también recuerdo que fue un poco más complicado de lo que esperaba.
Una rápida búsqueda en Google en AllocConsole arroja lo que aparentemente es un artículo de Windows Developer Journal que parece relevante. A partir de ahí, lo siguiente parece similar a lo que recuerdo, por vago que sea.
void SetStdOutToNewConsole()
{
int hConHandle;
long lStdHandle;
FILE *fp;
// Allocate a console for this app
AllocConsole();
// Redirect unbuffered STDOUT to the console
lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen(hConHandle, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
}
Aquí hay una página que le indicará cómo hacerlo, incluido el código de muestra.
Debe crear una ventana de consola utilizando AllocConsole () y, a continuación, asociar los identificadores de archivo estándar de C a los ASA de la nueva ventana de consola.
Respondiendo estrictamente a su pregunta, puede usar funciones similares a printf en una aplicación Win32 en Visual Studio 2010 usando la función winbase.h OutputDebugString
.
Escribí un programa simple que muestra cómo hacerlo.
#include <windows.h>
#include <stdio.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdShow, int nCmdShow)
{
int number = 10;
char str[256];
sprintf_s(str, "It works! - number: %d /n", number);
OutputDebugString(str);
return 0;
}
La función OutputDebugString
toma un LPCSTR
como parámetro. Utilicé los sprintf_s
para formatear la cadena antes de imprimir.
Esto imprimiría el resultado en la ventana de resultados de Visual Studio 2010.
¡Espero que ayude!