gpt4 book ai didi

C# 调试器拦截来自 native DLL 的 WriteConsole 事件

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:32 27 4
gpt4 key购买 nike

我有一个调用 native DLL 的 C# 应用程序。 native DLL 调用 AllocConsole 创建一个新的控制台,然后 WriteConsole 写入它。当应用程序在没有附加调试器的情况下运行时,此行为工作正常。但是当它在附加了 Visual Studio 的托管调试器的情况下运行时,在调用 AllocConsole 时仍然会弹出新的控制台窗口,但在我调用 WriteConsole 时不会向其中写入任何内容。

调试器似乎正在拦截控制台命令并将它们发送到 VS,但是文本没有出现在我可以看到的任何 VS 窗口中(输出或中间。)我可以故意写入 VS 窗口调用 OutputDebugString,但我真的希望能够写入使用 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# 调试器拦截来自 native DLL 的 WriteConsole 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8266379/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com