2010-12-03 8 views
1

私はネイティブC++ DLLを呼び出すC#アプリケーションを持っています(私は両方のソースを制御します)。私は管理側からAllocConsole()を使用して、ネイティブ側に呼び出しました。しかし、ネイティブコードはコンソールに出力されません。コンソールを使用できるとはいえ、明示的に割り当てただけなので、何も起こりません。コードは、ネイティブコードからの最初のコンソール出力の前にコンソールを割り当てるとうまく動作しますが、いくつかのstd :: cout呼び出し中にコンソールを割り当てると失敗します。何か案は?AllocConsole()とマーシャリングを使用したときの問題

+0

コンソールウィンドウを作成する前* CRTがstdoutを初期化する前に*重要です。 –

答えて

1

アプリケーションがコンソールサブシステムを使用するようにリンクされていない場合は、hook it up yourselfが必要です。

+0

あなたが知っているのは、そのリンクは13歳で、私が使用しているものよりも前のバージョンのVisual Studio 5について書いていますよね? std :: ios :: sync_with_stdio()は出力をコンソールではなくVS出力ウィンドウにリダイレクトさせます。 – Puppy

+0

これまでネイティブアプリケーションとVisual Studio 2005を使用してきたことが、私にとってはうまくいきました。おそらく、管理対象アプリケーションの問題です。 – Luke

+1

私はそれを理解しました。 Visual Studioは、標準出力を出力ウィンドウにリダイレクトしています。これを回避するには、CreateFile( "CONOUT $")とSetStdHandle(STD_OUTPUT_HANDLE)を使用して標準出力ハンドルを(一時的に)リセットします。しかし、これの結果が分からない。 – Luke

関連する問題