我正在尝试将输出从我的DLL重定向到外部控制台窗口,以便于调试。
我被告知AllocConsole,但我无法重现它,即控制台窗口没有出现。
我目前的环境是Visual Studio 2005。
我尝试了以下从互联网上下载的例子,
AllocConsole();
HANDLE han = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsole(han,"hello",6,new DWORD,0);
但没有任何反应。如果首先可以通过DLL创建控制台窗口,有人可以指出我正确的方向。
提前致谢!
答案 0 :(得分:3)
输出调试字符串的正确方法是通过OutputDebugString()
,使用适当的调试工具监听输出字符串。
答案 1 :(得分:2)
加载后,DLL没有什么特别之处,因此对于DLL而言,分配控制台的方式与最初加载它的EXE无关。
话虽如此,一个进程一次只能与一个控制台关联,所以如果已经有一个控制台连接到该进程,那么分配一个新进程就不会做任何事情(我假设你正在检查) AllocConsole的返回值?返回什么?GetLastError
返回什么?)
还有其他一些可能性。例如,如果您的DLL被加载到服务中,那么该服务(可能)将在与当前登录用户不同的窗口工作站下运行,因此如果您创建控制台窗口,您将无法看到它