2011-11-25 7 views
2

ネイティブDLLを呼び出すC#アプリケーションがあります。ネイティブDLLはAllocConsoleを呼び出して新しいコンソールを作成し、WriteConsoleを作成して書き込みます。デバッガを接続せずにアプリケーションを実行すると、この動作は正常に動作します。しかし、Visual Studioのマネージデバッガを接続して実行すると、AllocConsoleが呼び出されたときに新しいコンソールウィンドウがポップアップしますが、WriteConsoleを呼び出すと何も書き込まれません。ネイティブDLLからWriteConsoleイベントを傍受するC#デバッガ

デバッガがコンソールコマンドをインターセプトしてVSに送信しているように見えますが、テキストはVSウィンドウには表示されません(出力または中間)。VSウィンドウに意図的に書き込むことができますOutputDebugStringを呼び出すことによって、私は実際には、現在のコンソール行を上書きできるようにするために、SetConsoleCursorPositionのような関数を使用しているので、AllocConsoleで作成されたコンソールに書き込むことができます。現時点では、私の回避策は次のようなものです

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()を呼び出すことを試みましたが、これも問題を解決しません。 –

関連する問題