我有一个调用本机DLL的C#应用​​程序。本机DLL调用AllocConsole创建一个新的控制台,然后调用WriteConsole对其进行写入。当应用程序在未连接调试器的情况下运行时,此行为运行良好。但是,当它与附加的Visual Studio托管调试器一起运行时,调用AllocConsole时仍会弹出新的控制台窗口,但是当我调用WriteConsole时却没有写入任何内容。

似乎调试器正在拦截控制台命令并将其发送给VS,但是文本不会出现在我可以看到的任何VS窗口中(输出或中级。)我可以通过调用OutputDebugString故意将其写入VS窗口,但是我真的很想能够写出用AllocConsole制作的控制台,因为我使用了SetConsoleCursorPosition之类的功能来覆盖当前控制台行。目前,我的解决方法是

if(debuggerAttached) OutputDebugString(...) else WriteConsole(...)

这相当不雅致,没有给我我想要的功能。关于如何使VS调试器不拦截C++控制台事件的任何想法?当我在纯本地环境中时,不会发生此问题。

最佳答案

在向控制台编写任何内容之前,请尝试使用这段代码。

//AllocConsole() is called
StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput());
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);

Here是我最近问的一个问题,可能对您有用,还有一个答案,它解释了上面的代码。

关于c# - C#调试器拦截来自 native DLL的WriteConsole事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8266379/

10-12 23:20