アプリの最初でAllocConsoleを呼ぶ。これでコンソールが表示される。1アプリにつき1コンソールしかもてない。
コンソールに表示したい文字列を以下のように実行する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
void CMyApp::LogDebug(LPCSTR p) { if(m_bAppDebug) { DWORD d; WriteConsoleA( GetStdHandle(STD_OUTPUT_HANDLE), (CONST VOID *)p, strlen(p), &d, NULL ); WriteConsoleA( GetStdHandle(STD_OUTPUT_HANDLE), (CONST VOID *)"\r\n", 2, &d, NULL ); } } |
この関数、引数は同じなのにもかかわらずAとWがあるということは、内部でうまく変換してくれるのだろうか。
ここでは試していない。
WriteConsoleの代わりにWriteFileでもいい。これならルーチン化してログをファイルにとる場合でも使えるようになる。
アプリの最後にFreeConsoleを呼んで開放する。
ただし問題もある。このプロセスが作られる際に標準ハンドルの継承など普通の起動のさせ方でない場合、この方法がうまくいかない場合がある。よってちゃんとつくるなら、それを調べるか、あるいは自分でウインドウをつくってやるしかない。