【发布时间】:2011-11-25 08:27:31
【问题描述】:
我有一个调用本机 DLL 的 C# 应用程序。本机 DLL 调用 AllocConsole 来创建一个新的控制台,然后调用 WriteConsole 来写入它。当应用程序在没有附加调试器的情况下运行时,此行为可以正常工作。但是,当它在附加了 Visual Studio 的托管调试器的情况下运行时,调用 AllocConsole 时仍会弹出新的控制台窗口,但调用 WriteConsole 时没有写入任何内容。
调试器似乎正在拦截控制台命令并将它们发送到 VS,但文本没有出现在我可以看到的任何 VS 窗口(输出或中间)中。我可以通过故意写入 VS 窗口调用 OutputDebugString,但我真的希望能够写入使用 AllocConsole 制作的控制台,因为我使用 SetConsoleCursorPosition 之类的函数来覆盖当前控制台行。目前我的解决方法是
if(debuggerAttached) OutputDebugString(...) else WriteConsole(...)
这是相当不雅的,并没有给我我想要的功能。关于如何让 VS 调试器不拦截 C++ 控制台事件的任何想法?当我在纯原生环境中时,不会出现此问题。
【问题讨论】:
标签: c# c++ dll visual-studio-debugging