ウィンドウアプリを作成していたが、途中でコンソールアプリに変更したい。そこで、printf などの関数を利用して標準出力へ出力したいのに、うまくいかない。どうもMFCアプリだとうまくいかないよう。今回は、元々がダイアログベースのアプリで起きたが、たぶん他の形態でも起こりそう。
解決方法: リンカのパラメータに /entry:"WinMainCRTStartup" と /subsystem:console を指定する。
VisualC++.Net の場合: [構成プロパティ] -> [リンカ] -> [詳細] -> [エントリポイント] に WinMainCRTStartup を指定。[構成プロパティ] -> [リンカ] -> [システム] -> [サブシステム] に コンソール(/SUBSYSTEM:CONSOLE) を指定。
AllocConsole を使うという方法もウェブで見かけるけど、これは別にコマンドプロンプトの窓が出現するタイプ。
AllocConsole(); freopen("con", "w", stdout); printf("hello console"); FreeConsole();
ちなみに、ダイアログベースのアプリから、ダイアログを排除して、コンソール処理を利用する方法も以下。
CWinApp のサブクラス(CHogeApp) の InitInstance 関数内で CHogeDlg dlg; などと宣言されているので、これを含めて以下をバッサリ捨てて(コメントアウト)、替わりにコンソール対応のプログラムを埋め込む。
tags: VisualC++.Net zurazure
Posted by NI-Lab. (@nilab)