回答編集履歴

1

追記

2017/06/15 14:06

投稿

catsforepaw
catsforepaw

スコア5938

test CHANGED
@@ -31,3 +31,47 @@
31
31
 
32
32
 
33
33
  できません。コンソールウィンドウは一つのプロセスで一つしか作れないという仕様になっています。
34
+
35
+
36
+
37
+ ---
38
+
39
+ 追記
40
+
41
+
42
+
43
+ どうやらコマンドプロンプトとMinGWのシェルでは、GUIアプリ(サブシステムがWINDOWS)を実行する際の挙動が違うようです。MinGWのシェルはコマンドラインツールしか使ったことがなかったので、今まで知りませんでした。
44
+
45
+
46
+
47
+ コマンドプロンプトでは、GUIアプリには標準入出力用のハンドルが渡されません。そのため、パイプやリダイレクトも無視されます。実行すると終了を待たずにすぐにプロンプトに戻るのでそういう仕様にしているのだと思います。
48
+
49
+
50
+
51
+ 一方MinGWのシェルでは、GUIアプリにも標準入出力用のハンドルが渡されます。実行すると終了するまで制御が戻らないのは、おそらくそのためでしょう。GUIアプリでprintfしてみたら、普通に出力されていましたし、リダイレクトも有効でした。
52
+
53
+ (ご質問時にうまくできなかったのはコマンドプロンプトで実行したからでしょうか?)
54
+
55
+
56
+
57
+ ということを踏まえて、
58
+
59
+
60
+
61
+ > ■ CUI + GUI
62
+
63
+ > ■ GUI のみ
64
+
65
+ > ■ CUI のみ ( 今回はスルー )
66
+
67
+
68
+
69
+ このように、状況に応じてコンソールウィンドウを開いたり開かなかったり、といったことをするには、とりあえず、MinGWのシェルを使うことが前提であれば、特に難しいことを考えることなくGUIとGUI+CUIの切り替えが実現可能だと思います。エクスプローラーで起動したときにコンソールウィンドウを表示したいという場合は、`AllocConsole`関数を使う方法で良いかと思います。
70
+
71
+
72
+
73
+ 一方コマンドプロンプトで同じようなことをさせるのはかなり難しいと思います。コンソールアプリにすると、エクスプローラーで起動したときに必ずコンソールウィンドウが開きますし、GUIアプリではコンソールへの出力はできてもリダイレクトはできません。
74
+
75
+ GUIアプリに加えてコマンドプロンプトからの起動用のCUIアプリも作る(そしてパイプで受け渡し)、といったことをする必要があるかもしれません。
76
+
77
+