【发布时间】:2018-04-16 07:23:10
【问题描述】:
我创建了一个基于 MFC 对话框的应用程序。在 VS2013 中,我可以创建一个控制台窗口并输出消息。当我升级到 VS2017 时,执行相同的代码,创建控制台窗口但没有消息输出。以下是我的代码:
bool Initialize(void)
{
HWND hWnd = GetConsoleWindow();
if (NULL != hWnd)
{
return true;
}
if (!AllocConsole())
{
return false;
}
HANDLE m_hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (INVALID_HANDLE_VALUE == m_hStdOut)
{
return false;
}
int m_hCrt = _open_osfhandle((intptr_t)m_hStdOut, _O_TEXT);
if (-1 == m_hCrt)
{
return false;
}
FILE* m_pCrtFile = _fdopen(m_hCrt, "w");
*stdout = *m_pCrtFile;
int ret = setvbuf(stdout, NULL, _IONBF, 0);
if (-1 == ret)
{
return false;
}
return true;
}
void WriteLine(LPCTSTR lpszText)
{
Initialize();
std::wcout << lpszText;
std::wcout << std::endl;
std::wcout.flush();
system("pause");
}
BOOL CMFCApplication1App::InitInstance()
{
WriteLine(_T("test"));
...
}
问题: 我应该如何修改我的代码以在 VS2017 中将消息输出到控制台?
【问题讨论】:
-
来自stdin, stdout, stderr: "这些指针是常量,不能被赋予新的值。
freopen函数可用于将流重定向到磁盘文件或其他设备。" 代码行*stdout = *m_pCrtFile;无效。如果它看起来有效,那只是巧合。
标签: c++ mfc console visual-studio-2017