2010-05-03 359 views
1

我正在尝试将输出从我的DLL重定向到外部控制台窗口以便于调试。DLL中的控制台输出窗口

我被告知AllocConsole但我无法重现它,即控制台窗口没有出现。

我现在的环境是Visual Studio 2005中

我尝试下面的例子,其下车互联网,

AllocConsole(); 
HANDLE han = GetStdHandle(STD_OUTPUT_HANDLE); 
WriteConsole(han,"hello",6,new DWORD,0); 

但没有任何反应。如果首先有可能通过DLL创建控制台窗口,有人能指出我的方向是正确的。

在此先感谢!

回答

3

输出调试字符串的正确方法是通过OutputDebugString(),使用适当的调试工具监听输出字符串。

+0

那,或者把它写到一个文件什么的。我同意。 – 2010-05-03 06:30:54

+0

@Ignacio Vazquez-Abrams你推荐什么样的调试工具?我没有使用调试工具进行测试的选项/特权,因为应用程序框架托管在另一台服务器上,除了用于测试的DLL插件的传输,我无法执行任何安装。请指教。谢谢!
@codeka我可以将输出写入文件,但每次发生更改时我都必须重新打开该文件,并且我期待着每秒都会发生实时更改。 – user303907 2010-05-03 06:51:20

+1

http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx – 2010-05-03 07:06:37

2

一旦加载,DLL就没有什么特别之处了,所以对于DLL来说,分配控制台对于最初加载它的EXE没有任何不同。如此说来,一个进程一次只能与一个控制台相关联,所以如果已经有一个控制台连接到进程,那么分配一个控制台不会做任何事情(我假设你是检查返回值AllocConsole?它返回什么?GetLastError返回什么?)

还有其他一些可能性。例如,如果您的DLL被加载到服务中,那么该服务将(有可能)在与当前登录的用户不同的窗口站下运行,所以如果您创建控制台窗口,您将无法看到它。