Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#调试器从本机DLL截获WriteConsole事件_C#_C++_Dll_Visual Studio Debugging - Fatal编程技术网

C#调试器从本机DLL截获WriteConsole事件

C#调试器从本机DLL截获WriteConsole事件,c#,c++,dll,visual-studio-debugging,C#,C++,Dll,Visual Studio Debugging,我有一个调用本机DLL的C#应用程序。本机DLL调用AllocConsole创建一个新控制台,然后WriteConsole对其进行写入。当应用程序在未连接调试程序的情况下运行时,此行为可以正常工作。但是当它在连接了VisualStudio的托管调试器的情况下运行时,调用AllocConsole时仍然会弹出新的控制台窗口,但在调用WriteConsole时不会写入任何内容 似乎调试器正在拦截控制台命令并将其发送到VS,但文本不会出现在我可以看到的任何VS窗口中(输出或中间)。我可以通过调用Outp

我有一个调用本机DLL的C#应用程序。本机DLL调用AllocConsole创建一个新控制台,然后WriteConsole对其进行写入。当应用程序在未连接调试程序的情况下运行时,此行为可以正常工作。但是当它在连接了VisualStudio的托管调试器的情况下运行时,调用AllocConsole时仍然会弹出新的控制台窗口,但在调用WriteConsole时不会写入任何内容

似乎调试器正在拦截控制台命令并将其发送到VS,但文本不会出现在我可以看到的任何VS窗口中(输出或中间)。我可以通过调用OutputDebugString有意地写入VS窗口,但我确实希望能够写入使用AllocConsole制作的控制台,因为我使用诸如setConsoleUrsOrposition之类的函数来覆盖当前控制台行。目前我的工作是这样的

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

这是相当不雅观,没有给我的功能,我想要的。关于如何让VS调试器不拦截C++控制台事件的想法?当我处于纯本机环境中时,不会出现此问题。

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

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

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

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

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

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

不幸的是,这似乎没有任何效果,但我会继续尝试。我尝试先调用FreeConsole(),以防托管调试器自动将其附加到其他控制台,但这也不能解决问题。不幸的是,这似乎没有任何效果,但我将继续尝试。我尝试先调用FreeConsole(),以防托管调试器自动将其附加到其他控制台,但这也无法解决问题。