MFC程序通常无法写入stdout.MFC在启动期间使用stdout/stdin管道做了一些奇怪的事情,你写的任何内容(例如,执行printf("hello");)只是转到/ dev/null.
有谁知道如何从MFC程序成功写入stdout?
谢谢阅读.
小智 9
在花了一整天试图让我的 MFC 程序使用 printf() 和 cout 进行打印后,我终于找到了一个解决方案并决定将其发布在这里以帮助想要在 MFC 打印的人...
void EnablePrintfAtMFC()
{
if (AttachConsole(ATTACH_PARENT_PROCESS))
{
FILE* pCout;
freopen_s(&pCout, "CONOUT$", "w", stdout);
std::cout.clear();
std::wcout.clear();
}
}
Run Code Online (Sandbox Code Playgroud)
只需在程序的某个地方调用上述函数,然后就可以使用 printf() 和 cout...
EnablePrintfAtMFC();
printf("Hello world!\n");
std::cout << "It works!" << endl;
Run Code Online (Sandbox Code Playgroud)
这是我在网上发现的一个单线程,它将stdout附加到MFC中的控制台.这允许printf和cout写入当前进程的控制台窗口.我从未研究过它是如何工作的,所以如果你需要一个cerr或cin版本,你就可以自己动手了.
AllocConsole();
*stdout = *_tfdopen(_open_osfhandle((intptr_t) GetStdHandle(STD_OUTPUT_HANDLE), _O_APPEND), _T("a"));
Run Code Online (Sandbox Code Playgroud)
这将附加到调用控制台窗口(如果存在).GotConsoleAttach将是FALSE从控制台调用应用程序时.
GotConsoleAttach = FALSE;
if (AttachConsole(ATTACH_PARENT_PROCESS))
{
int osfh = _open_osfhandle((intptr_t) GetStdHandle(STD_OUTPUT_HANDLE), 8);
if ((HANDLE)osfh != INVALID_HANDLE_VALUE)
{
*stdout = *_tfdopen(osfh, _T("a"));
GotConsoleAttach = TRUE;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只是在调试窗口中查找输出,则可以使用TRACE.
TRACE("This is a debug string of text in MFC");
Run Code Online (Sandbox Code Playgroud)
当我快速测试某些内容并且不想使用MessageBox("text")等对话框时,我会这样做.
| 归档时间: |
|
| 查看次数: |
19000 次 |
| 最近记录: |