2016-03-23 5 views
0

とWin32で、私はLinux上での楽しみのためのSDL2アプリケーションを開発する、しかし私は、Windowsもそれをテストすることなく、Linux以外のユーザーのためにも構築します(私はまったくのWindowsを持っていない、ありませんでした)。私はmingwをクロスコンパイルに使用しています。すべてうまく動作しますが、1つのこと。アプリケーションには、Cで単純なprintf()を使用するコマンドラインスイッチ/メッセージ/ヘルプもいくつかありますが、Windowsでは単純に動作しません。出力は表示されません。私はこれを見つけた:setvbuf (stdout, NULL, _IONBF, 0);しかしそれは助けなかった。また、私は様々な文書でmingwのと-mconsole-mwindowsスイッチを見つけましたが、私は十分にWindowsを知っていないので、私は物事が私のシステム(Windowsの場合)に、この奇妙に取り組むべきか見当がつかない。など、これらのメッセージに示さ/Cのprintf()mingwの

を使用すると、ターミナルウィンドウから起動する場合は、標準出力を見ることができますが、ない場合、彼らは全く見ることができない、何のウィンドウが開いていません。基本的に私は、Linuxと同様のソリューションをしたいと思います

答えて

1

私はLinuxのプログラムと同じ振る舞いを持つウィンドウがないことを知っています。

-mwindowsがなくても(他の多くの機能は別として)、出力はstdoutに送られ、cmdで表示されます(そして、パイプ経由で他のプロセスstdinに転送できます)。追加のコンソールウィンドウを開いて出力します。 -mwindows

は、コンソールにリンクされ、もはやはstdioません。出力をリダイレクトできますが、表示されません(例:your_program.exe | catは出力を表示しますが、標準ウィンドウにはcatはありません)。ただし、このモードではコンソールウィンドウは自動的に開きません。あなたはまだあなたのための罰金とすることができる(手動でコンソールを作成(または親プロセスのコンソールを継承)と(freopen("CONOUT$", "w", stdout)で)それに標準出力をリダイレクトしますが、これは「真」stdioのではないでしょうし、あなたが他のプロセスへのパイプをすることはできません)。

+0

私は見て、ありがとう。 -mwindowsがなければ、新しいコンソールが自動的に開くか、最初の出力でのみ開きますか?どういうわけか、私は既にコンソールを持っているか、新しい_開いていることをテストすることはできますか? stdioはバッファされていますか?私はprintf()のは、freopen()トリック、古いメッセージが失われている場合、右(私は - mwindows)を意味すると思いますか?一般に、-mwindowsを使用せずに、新しくオープンしたcmdウィンドウを制御することができます(すでにテスト済みの場合はテストします)。私は、それを閉じたり、私がすでに持っているかどうかをテストします。多くの可能な初心者の質問には申し訳ありません。ありがとう! –

+0

私は窓の専門家ではありませんが、あなたのほとんどが正しいと思われると言います。私はWindowsが基本的にコンソールとWindowsのアプリケーションを分離するので、混乱の大部分が起こると思います。コンソールアプリケーションのコンソールウィンドウは 'main'の前に表示され、プログラムが終了すると自動的に閉じます。 Windowsアプリケーションでは、親のプロセスコンソールにアタッチするために手動で 'AllocConsole'または' AttachConsole(-1) 'を実行するか、オプションでコマンドラインを切り替えて実行します。 stdin/stdout/stderrを再接続し、必要に応じてバッファリングを無効にします。 – keltar

+0

もう一度ありがとう!私にとっては、あなたは特に自分自身に比べて窓の専門家です:)私はそれらの提案された機能を見ていきます。 –