我正在尝试将控制台附加到Windows下正在运行的c ++(无控制台)程序。由于我无法访问程序的源代码,只能访问为了将插件编写为DLL而暴露的接口,我在我的插件的DllMain中执行此操作。代码看起来像这样(它的灵感来自How can I attach a console to my win app?博客帖子):
int __stdcall DllMain(void *,unsigned, void *){
AllocConsole();
AttachConsole(GetCurrentProcessId());
FILE* retStream;
freopen_s(&retStream,"CONOUT$","w",stdout);
if(!retStream) throw std::runtime_error("Stdout redirection failed.");
freopen_s(&retStream,"CONOUT$","w",stderr);
if(!retStream) throw std::runtime_error("Stderr redirection failed.");
return 1;
}
当主程序被指示加载DLL但在瞬间消失时,窗口出现; DLL没有被卸载,因为它的其他函数被调用。可能是什么问题?如何让控制台保持打开状态?
主程序GUI是使用Qt编写的,但同样,Qt头不是程序界面的一部分。