DLL 中的控制台输出窗口
Posted
技术标签:
【中文标题】DLL 中的控制台输出窗口【英文标题】:Console output window in DLL 【发布时间】:2010-05-03 06:18:46 【问题描述】:我正在尝试将我的 DLL 的输出重定向到外部控制台窗口以便于调试。
有人告诉我 AllocConsole,但我无法重现它,即没有出现控制台窗口。
我当前的环境是 Visual Studio 2005。
我尝试了以下从互联网上下载的示例,
AllocConsole();
HANDLE han = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsole(han,"hello",6,new DWORD,0);
但什么也没发生。如果首先可以通过 DLL 创建控制台窗口,有人能指出我正确的方向吗?
提前致谢!
【问题讨论】:
【参考方案1】:输出调试字符串的正确方法是通过OutputDebugString()
,使用适当的调试工具监听输出字符串。
【讨论】:
那个,或将其写入文件或其他东西。我同意。 @Ignacio Vazquez-Abrams 您推荐哪种调试工具?我没有使用调试工具进行测试的选项/特权,因为应用程序框架托管在另一台服务器上,除了传输用于测试的 DLL 插件外,我无法执行任何安装。请指教。谢谢! @codeka 我可以将输出写入文件,但是每次发生更改时我都必须重新打开文件,并且我希望每秒都有实时更改。【参考方案2】:一旦加载,DLL 就没有什么特别之处了,所以分配控制台对于 DLL 与最初加载它的 EXE 没有任何不同。
话虽如此,一个进程一次只能与一个控制台相关联,所以如果已经有一个控制台连接到该进程,那么分配一个新的控制台不会做任何事情(我假设你正在检查AllocConsole的返回值?它返回什么?GetLastError
返回什么?)
还有一些其他的可能性。例如,如果您的 DLL 被加载到服务中,那么该服务将(很可能)在与当前登录用户不同的窗口站下运行,因此如果您创建控制台窗口,您将无法看到它.
【讨论】:
以上是关于DLL 中的控制台输出窗口的主要内容,如果未能解决你的问题,请参考以下文章
将命令提示符输出重定向到 Visual Studio 2012 中的输出窗口
如何在 GUI 输出窗口而不是 Visual Studio 2015 中的 cmd 控制台上显示我的 C++ 程序输出?