1つのプログラムで 実行時の引数により
ウインドウプログラムとコンソールプログラムのどちらも動かせるように
したいと思ってます。
実際にWinMainでウインドウプログラムを作成してから
コマンドラインで動作するように作ってみましたが、
printfのような出力メッセージが機能しません。
printfを出力させるためにはどうしたらよいのでしょうか?
GUIで起動した場合は標準入出力が設定されていません。
のでprintf()は出力先がないことになります。
AllocConsole()でコンソールを開けるようですが…
適当に検索してみると
http://www.f13g.com/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0/C_C++/Windows/GUI%A4%C8CUI%A4%F2%BA%AE%BA%DF%A4%B5%A4%BB%A4%EB/
こんなページを見つけました。
試してみる価値はある…かと思われます。
# CUIからプロセス起動させた場合に、呼び出し元のCUIが使えるのか…というのはありま
すが……。
返信ありがとうございます。
AllocConsole()は私も試してみたのですが
これは、別のコンソール用のウインドウが立ち上がるもののようで
コマンドプロンプト画面に直接文字を出力してくれないようなのです。
私としてはコマンドプロンプト画面に直接文字を出力してほしいので
こちらの方法以外のやり方を探しております。
逆に、consoleで起動して、
別スレッドでメッセージループを回すのはどうでしょうか。
コンソールアプリでもwin32でメッセージポンプさえしてあげれば
ウィンドウも表示動作できますので、いけそうな気がします。
(私が以前やったときはコンソール側は出力専用にしてましたので
入力は未確認ですが)
追伸
私も同じようなことをしたことがありますがその時は、
ウィンドウメイン時は
コンソールのHWNDを取ってそれを非表示にしました。
1つのプログラムで・・・ということですが
3つプログラムを用意してはいかがでしょうか?
CmdSwitch.exeはWinMainがエントリーでコマンドラインを分析
コマンドラインの結果で
GUI.exe か CUI.exe のどちらかを起動する
なぜ「1つのプログラム」である必要があるのか疑問です。
そのあたりの理由がはっきりすれば他の選択肢もあるんじゃないでしょうかね。
私なら、処理を行う部分(共通部分)をDLLにして、ユーザインターフェースを
2種類作成します。
最初に起動されるプログラムはCUI/GUIのどちらでもいいですが、コマンドライ
ンの解析結果によって逆のプログラムを起動するようにしておけばいいだけの
ような気がします。