WTLウィザードでスケルトンを作成するとSDI、モードレスダイアログは次の_tWinMainになる。(モーダルは異なる。)
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow) { HRESULT hRes = ::CoInitialize(NULL); // If you are running on NT 4.0 or higher you can use the following call instead to // make the EXE free threaded. This means that calls come in on a random RPC thread. // HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED); ATLASSERT(SUCCEEDED(hRes)); // this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used ::DefWindowProc(NULL, 0, 0, 0L); AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES); // add flags to support other controls hRes = _Module.Init(NULL, hInstance); ATLASSERT(SUCCEEDED(hRes)); int nRet = Run(lpstrCmdLine, nCmdShow); _Module.Term(); ::CoUninitialize(); return nRet; }
まずは、お決まりのCoInitializeが登場する。でも、COMを使わないなら必要ない(はず、実際、削除しても問題ないようです)。
thunking problemを解決するためにと書いてありますね。本質的な問題ではないようです。後で調べましょう。
コモンコントールを初期化する。しかし、たいていの場合コモンコントロールはすでに初期化されているため、削除しても問題はあまりおきないが、削除しないほうがいいでしょう。試すときは、UnRegisterClassをどうぞ。
おなじみです。いろいろ初期化しています。
メッセージループなどを含むRun関数を呼び出します。
これもお決まりです。
CoInitializeと対ですね。