ネイティブ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++コンソールイベントをインターセプトしないようにする方法に関するアイデアはありますか?この問題は、純粋にネイティブ環境の場合は発生しません。
残念ながら、これは何の効果もないようですが、私は実験を続けます。管理されたデバッガが別のコンソールに自動的に接続している場合に、FreeConsole()を呼び出すことを試みましたが、これも問題を解決しません。 –