c#调试器从本地DLL拦截WriteConsole事件
C# debugger intercepting WriteConsole events from a native DLL
我有一个调用本地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);
这是我最近问的问题,可能对你有用,也有一个答案,解释了上面的代码
相关文章:
- 将std::string传递给WriteConsole API
- Win32 API 控制台光标在 WriteConsole 后不移动
- Visual C++ Win32 API 代码来拦截某个击键
- 拖放我的MDI被CRichEditView拦截并在CRichEditView::GetDocument中崩溃 - 如何覆
- 如何在C++中正确创建/实现拦截器库?
- 使用eBPF拦截Linux上的所有传出/传入流量
- 如何拦截所有对 AfxThrowMemoryException 的调用
- 加密前如何拦截应用通信?
- 是否可以拦截/检测关闭 PC 并首先执行操作的请求?
- 如何拦截Qt Quick qml事件
- C++ grpc::experimental:interceptor 如何从自定义拦截器返回状态和消息
- 在线编译器 - 等待输入并自动馈送输入时拦截程序
- JNI 本机静态方法拦截
- WriteConsole访问在功能调用中违反,而不是来自main()
- 拦截黑莓电话
- C++ lambda 测试拦截器/模拟
- QWEBENGINEVIEW请求身体拦截
- 拦截com dllhost.exe调用
- 如何使用FFMPEG与C拦截编码的视频数据
- c#调试器从本地DLL拦截WriteConsole事件