コンソールを出すか出さないかを制御する

最近のVSのコンパイラオプションはデフォルトでマルチバイト対応になっているようだ。
つまり、


MessageBox(NULL,"hoge","hoge",MB_OK);
などと書くと怒られてしまうので、

MessageBox(NULL,L"hoge",L"hoge",MB_OK);
としなければならない。

まぁ我々日本人にとっては、後で日本語対応しないといけないことを考えると、最初からこのように強制的にしてくれていた方が間違いがなくてよろしい。

んで、とある理由によりコマンドラインから起動するのだが、コンソールウィンドウを出したくないアプリケーションを作りたくなった。そのときの手順を備忘録がてら書いておこう。

  1. int main -> int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
  2. strlen -> _tcslen などと、マルチバイト用関数に置換
  3. プロジェクト → 設定 → 構成 → リンク → Advanced → EntryPoint = wWinMainCRTStartup
  4. プロジェクト → 設定 → 構成 → リンク → System → SubSystem = Windows (/SUBSYSTEM:WINDOWS)