1

C++ (MFC を使用) で記述された GUI Windows アプリケーションがあり、stdoutストリームを介して出力するために親コンソールに接続されています。ここでは、AttachConsole API とRedirectIOToConsoleメソッドを使用します

したがって、通常のコンソール アプリケーションから次の行を呼び出した場合 (標準出力にネイティブに出力されます):

_tprintf(_T("Test message.\n"));

期待どおりの出力が得られます。

ここに画像の説明を入力

しかし、(親コンソールが接続された) GUI アプリから同じコード行を呼び出すと、次のようになります。

ここに画像の説明を入力

親コマンド プロンプト ウィンドウに入力できるので、ハングしないことに注意してください。Enter キーを押すと、コマンドとして入力したものは何でも実行されます。

では、親コンソールに制御を戻すために、コンソール アプリから何を呼び出していないのでしょうか?

4

1 に答える 1

1

制御を戻すことではありません。

コマンド プロンプトからコンソール アプリケーションを実行すると、コマンド プロンプトはコンソール アプリケーションが終了するまで待機するため、最初の図に示すように、コンソール アプリケーションからの出力に続いて新しいプロンプトが表示されます。

コマンド プロンプトから GUI アプリケーションを実行すると、コマンド プロンプトは GUI アプリケーションが終了するのを待たないため、通常、次のように、新しいプロンプトの後に GUI アプリケーションからの出力が表示されます。

C:\>TestGuiProjWithOutputToConsole
C:\>Test Message.
_

ご指摘のとおり、何も問題はありません。コマンドを入力すると機能しますが、プロンプトが間違った場所に表示されているだけです。

2 番目の例では、2 番目のプロンプトが表示されません。おそらく、改行文字が含まれているため、プロンプトが上書きされているためです。テスト メッセージの前に改行を出力してみてください。プロンプトが表示されるはずです (それでも間違った場所にあります)。

次のコマンドを実行して、コンソールに GUI アプリケーションを待機するように指示できます。

start /wait TestGuiProjWithOutputToConsole

要するに、GUI アプリケーションはコマンド プロンプトでうまく動作しません。両方が同時に実行され、同じコンソールに出力されるため、出力がごちゃ混ぜになるからです。

于 2013-02-27T11:40:10.080 に答える