2011-11-25 48 views
2

我有一個調用本機DLL的C#應用​​程序。本機DLL調用AllocConsole創建一個新的控制檯,然後WriteConsole寫入它。當應用程序在未連接調試器的情況下運行時,此行爲正常工作。但是,當它與Visual Studio的託管調試程序一起運行時,當調用AllocConsole時,仍會彈出新的控制檯窗口,但在調用WriteConsole時不會寫入任何內容。C#調試器攔截來自本地DLL的WriteConsole事件

這似乎是調試器攔截控制檯命令並將它們發送到VS,但文本不會出現在我可以看到的任何VS窗口中(輸出或中級)。我可以故意寫入VS窗口通過調用OutputDebugString,但我真的希望能夠寫入使用AllocConsole創建的控制檯,因爲我使用像SetConsoleCursorPosition這樣的函數來覆蓋當前的控制檯行。目前我的解決方法就像

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

這是相當不雅,不給我我想要的功能。關於如何讓VS調試器不攔截C++控制檯事件的任何想法?當我處於純粹的本地環境中時,不會發生此問題。

回答

0

在向控制檯寫入任何內容之前,請嘗試使用這段代碼。

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

Here是我最近問的問題,這可能是對你有用的,也有一個答案,這也解釋了上面的代碼。

+0

不幸的是,這似乎沒有任何效果,但我會繼續嘗試。我曾嘗試調用FreeConsole(),以防託管調試器自動將它附加到不同的控制檯,但這也不能解決問題。 –