web-dev-qa-db-ja.com

「APIENTRY_tWinMain」と「WINAPIWinMain」の違い

これらの2つの機能との違いは何ですか?:

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)

int WINAPI WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
18
xRobot

_tWinMainはtchar.hのWinMainの適切なバージョンへの単なる#defineショートカットです。

_UNICODEが定義されている場合、_tWinMainwWinMainに展開されます。それ以外の場合、_tWinMainWinMainと同じです。

関連するマクロは次のようになります(実際には他にも多くのコードが散在しています)。

#ifdef  _UNICODE
#define _tWinMain  wWinMain
#else
#define _tWinMain  WinMain
#endif
45
Cody Gray

違いは、とにかく完全に冗長なパラメータのエンコーディングです。パラメータを破棄し、代わりに次を使用して、エンコーディングを制御します。

hInstanceGetModuleHandle(0)です

とにかくhPrevInstanceはWin32では無効です

lpCmdLineは、ANSIとUnicodeの両方で、それぞれGetCommandLineA()GetCommandLineW()を介して使用できます。

nCmdShowは、wShowWindow構造体のSTARTUPINFOパラメーターです。繰り返しますが、ANSIおよびUnicodeの異体字で、GetStartupInfoA(STARTUPINFOA*)およびGetStartupInfoW(STARTUPINFOW*)を使用してアクセスします。

また、Win32 APIを使用してこれらにアクセスすることで、WinMainでのみ使用可能だと思っていたインスタンスハンドルを慎重に保存した場合のように、おそらくいくつかのグローバル変数を保存することになります。

21
Ben Voigt