2011-06-21 4 views
1

これはまったく別の「私のGUIアプリケーションにコンソールが必要です」というものではありません。私の状況はそれとは異なります。コンソールから起動したGUIアプリケーションは=>コンソールに印刷できませんか?

私はコマンドラインから実行されるWindows GUIアプリケーションを持っています。このアプリケーションに間違ったパラメータを渡すと、は表示されません。可能なスイッチを示すポップアップが表示されますが、私のプロセスを起動したコンソールに表示します。

私はコンソールに(親プロセスのAttachConsole(...)を呼び出す)ことができますが、問題は私のアプリケーションが "ブロッキング"ではないということです。私が起動するとすぐに、コマンドプロンプトが戻り、すべての出力がこのウィンドウに書き込まれます(図は添付の画像を参照)。

_

アプリが終了した後、私は、少し周りを演奏コンソールアプリケーションを作成し、それを実行して、そちらを参照してください、それは「ブロック」、プロンプトのみ再表示されます。 GUIツールを/ SUBSYSTEMに切り替えると、コンソールで奇妙なエラーが発生する(MSVCRTD.lib(crtexe.obj):エラーLNK2019:関数 "___tmainCRTStartup"内の未解決の外部シンボル "_main")

私は、 MSDEVからの ".exe"と ".com"ファイルアプローチですが、それは恐ろしいことです。これを解決する方法はありますか?

+1

コンソールサブシステムへの変更は正しい方法と言えます。あなたは主な宣言をコンソールアプリケーションと一貫して変更する必要があります。そのAFAIKを除いて、コマンドラインは単にそれを起動しているのでWinMainを使ってブロックすることはできません。 –

+0

コンソールサブシステムに切り替えると、その他の副作用があります。コンソールウィンドウの代わりにショートカットから起動すると、ショートカットが正しいパラメータを提供したとしても、新しいコンソールが作成されます。 – Jon

答えて

1

パラメータをチェックし、悪いパラメータにエラーメッセージを表示し、パラメータが正しいときに実際のプログラムを呼び出し/起動するコンソールベースのラッパーアプリを書くことがありますか?

+0

これは私が回避しようとしていたものです:(MSDEVの解決方法は、Windowsコンソールで優先順位が付けられている ".com"ファイルラッパーアプリですので、 "myapp"と入力すると最初に起動しようとします"myapp.com"と "myapp.exe"がありますが、これはスタンドアロンのアプリであり、複数のファイルを配布したくないのです。ソリューションは個々のアプリに含まれていなければなりません。両方の部分。 – Tom

2

これは、既に説明したようにラベルを変更する以外に、アプリケーションを変更して変更することはできません。コマンドインタプリタは、実行可能ファイルにラベルが付いているサブシステムを調べ、それに応じてアプリケーションが終了するのを待つかどうかを決定します。 If the executable is labelled as having a GUI, then the command interpreter doesn't wait for it to terminate.

これは設定可能です。 JP Software's TCC/LEでは、例えば、GUIの場合でもconfigure the command interpreter to always wait for applications to terminateが可能です。ただし、MicrosoftのCMDでは、これは構成可能な動作ではありません。 Microsoftの答えは、/WAITオプションを使用してSTART commandを使用することです。

もう一度:これは、アプリケーションのの動作ではありません。 TUIプログラムとしての再ラベル付けとは別に、コードを変更するプログラム方法はありません。

関連する問題