【问题标题】:FreeConsole then AttachConsole not workingFreeConsole 然后 AttachConsole 不工作
【发布时间】:2016-10-15 13:29:37
【问题描述】:

我正在使用 Visual Studio 2013 中的 C++ 控制台应用程序,在 Windows 上工作。

首先我使用 FreeConsole 分离了控制台,它可以工作;然后,我尝试使用 AttachConsole 将其附加回来,但什么也没发生 -

#include <psapi.h>

DWORD winpid = GetCurrentProcessId(); // get pid
std::cout << winpid; // it works    
FreeConsole(); // console lost
std::cout << "Lost to the bit bucket"; //nothing happen, as expected
AttachConsole(winpid); // try find the console back....
std::cout << "c"; // ... but failed

如何找回丢失的控制台?

【问题讨论】:

  • 您应该首先检查AttachConsole 返回的内容。如果它失败了,那么你应该得到错误代码来找出原因。
  • 好吧,您当然可以不附加到不再存在的控制台。您必须改用 AllocConsole() 并重新初始化流,以便它们与新控制台一起使用。
  • @HansPassant thx 的建议,现在我有另一个错误:stackoverflow.com/questions/40059902/…

标签: c++ windows console-application


【解决方案1】:

当您调用 FreeConsole() 时,您的控制台将不复存在。您不能调用 AttachConsole() 因为没有要附加的内容。您应该改为使用 AllocConsole() 创建一个新控制台,然后像这样“附加”到它:

AllocConsole();
FILE* f;
freopen_s(&f, "CONOUT$", "w", stdout);

然后稍后释放控制台:

fclose(f);
FreeConsole();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多