如何在Visual Studio 2010的Win32應用程序(使用WinMain輸入)中查看printf輸出?如何在Visual Studio 2010上查看Win32應用程序中的printf輸出?
回答
嚴格回答你的問題,你可以在Win32應用程序在Visual Studio 2010中的WINBASE.HOutputDebugString
功能使用類似printf函數。
我寫了一個簡單的程序,顯示如何做到這一點。
#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;
}
的OutputDebugString
函數接受一個LPCSTR
作爲參數。打印前,我使用sprintf_s
來格式化字符串。
這會將結果打印到視覺 工作室 2010輸出窗口。
我希望它有幫助!
很明顯,256只是例子,但我喜歡這種方法。絕對是我的想法。 – 2011-06-30 18:19:16
當然,只是一個例子。爲了方便起見,你可以把它包裝在一個類/函數中。很高興幫助!乾杯! – rbento 2011-07-05 21:34:47
'wchar_t str [256]; wsprintf(str,L「It works! - number:%d \ n」,number); OutputDebugString(str);' – 2016-07-07 20:23:09
我知道我在過去使用AllocConsole函數完成了這項工作,但我也記得它比我預期的稍微複雜一點。
快速谷歌搜索AllocConsole產生什麼顯然是Windows Developer Journal article似乎相關。從那裏,以下似乎與我記得的相似,儘管它是模糊的。
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);
}
由於某些原因,這不適用於彩色輸出 – paulm 2016-01-01 14:06:37
Here is a page that will tell you how to do this, including sample code.
則必須使用AllocConsole()一個控制檯窗口,那麼關聯的C標準文件句柄到新的控制檯窗口的句柄。
您需要一個控制檯窗口。到目前爲止最簡單的方法是更改鏈接器選項:項目+屬性,鏈接器,系統,子系統=控制檯。添加一個main()方法:
int main() {
return _tWinMain(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW);
}
'_tWinMain'是Win32應用程序的主要功能,而不是「WinMain」 – 2014-01-28 03:57:50
感謝torak你的答案。這對我幫助很大。
我需要一個更大的滾動回緩衝區,所以在看了一下API functions後做了一些補充。在此幫助其他人共享:
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);
}
}
這會將回滾(屏幕緩衝區)高度增加到9999行。
測試在Windows XP和Windows 7
爲了節省對像我這樣的剪貼者的查找,還需要包含
另一種方式,也不會要求改變現有的printf的,並打印到VS輸出窗口會去是這樣的:
#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");
你是個天才! – Skynight 2017-05-30 04:35:09
- 1. 如何在Visual Studio 2010中查看調試輸出?
- 2. 在Visual Studio 2010中使用boost :: test - 如何查看測試輸出?
- 3. 查看Visual Studio 2010中的控制檯輸出?
- 4. Win32應用程序控制臺輸出?
- 5. iOS - 如何看iphone上的printf輸出?
- 6. 使用Visual Studio 2010,如何向Visual C++ Win32控制檯應用程序提供輸入?
- 7. Visual Studio 2010 - 僅查看特定類別的輸出
- 8. 在Visual Studio 2010中,如何在MVC應用程序中調用「在瀏覽器中查看」功能?
- 9. 如何在Visual Studio 2010中自動部署Web應用程序?
- 10. 如何在Visual Studio 2010中組織Windows窗體應用程序
- 11. Visual Studio 2010中的幫助查看器
- 12. On Visual Studio 2013. Win32應用程序和CLR應用程序
- 13. Visual Studio 2010可以在Visual Studio中查看嗎?
- 14. Visual Studio 2010 - 調試輸出
- 15. 應用程序圖標Visual Studio 2010 C++
- 16. 「嵌套」Visual Studio 2010 Web應用程序
- 17. Visual Studio 2010 Web應用程序部署
- 18. 在Visual Studio中捕獲控制檯應用程序的輸出
- 19. SlimDX:無法看到的Direct3D調試輸出在Visual Studio 2010
- 20. 如何在Visual Studio 2010中設置輸出路徑和程序集名稱?
- 21. 當堆棧溢出流程異常拋出時在Visual Studio 2010中查看CallStack
- 22. 在Visual Studio 2010上開發Win CE應用程序
- 23. 在Visual Studio 2010上報告應用程序
- 24. 如何在Visual Studio中導出程序?
- 25. 程序結束後退出Visual Studio 2010
- 26. 如何在Visual Studio 2010中
- 27. Visual Studio 2010 - ASP.NET MVC3應用程序 - SQL Server 2005上的SSRS
- 28. Visual Studio中Web應用程序的控制檯輸出
- 29. 在Visual Studio 2010中使用串行端口應用程序
- 30. WPF應用程序模板在Visual Studio 2010中不可用
你想從應用程序中打開一個單獨的控制檯窗口,還是你想將其顯示在主應用程序窗口的控件上?或將其記錄到文件? – 2010-06-09 19:45:14
其實我希望能夠像xcode中的控制檯窗口那樣可以看到控制檯輸出而不必更改任何代碼。顯示stdout的日誌也可以。 – 2010-06-09 20:05:18