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++ 程序输出?

用来调式跟踪的控制台输出调试输出

在控制台窗口中输出颜色方阵

(转)Visual Studio控制台程序输出窗口一闪而过的解决方法

转-Visual Studio控制台程序输出窗口一闪而过的解决方法