「Apientry _twinmain」と「Winapi Winmain」の違い
質問
これら2つの関数との違いは何ですか?:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
解決
_tWinMain
ただです #define
適切なバージョンのtchar.hのショートカット WinMain
.
もしも _UNICODE
次に、定義されています _tWinMain
に拡大します wWinMain
. 。さもないと、 _tWinMain
と同じです WinMain
.
関連するマクロはこのように見えます(実際には他にも多くのコードが散在しています):
#ifdef _UNICODE
#define _tWinMain wWinMain
#else
#define _tWinMain WinMain
#endif
他のヒント
違いは、パラメーターのエンコードであり、とにかく完全に冗長です。パラメーターを捨てて、代わりにエンコードを制御する場合は、次のことを使用します。
hInstance
ただです GetModuleHandle(0)
hPrevInstance
とにかくWin32では有効ではありません
lpCmdLine
ANSIとUnicodeの両方で使用できます GetCommandLineA()
と GetCommandLineW()
, 、 それぞれ
nCmdShow
それは wShowWindow
のパラメーター STARTUPINFO
構造。繰り返しますが、ANSIおよびUnicodeバリアントは、使用してアクセスします GetStartupInfoA(STARTUPINFOA*)
と GetStartupInfoW(STARTUPINFOW*)
.
そして、Win32 APIを使用してこれらにアクセスすることで、おそらくいくつかのグローバル変数を保存するでしょう。 WinMain
.
から このリンク:
_twinmainは実際にはhprevinstanceパラメーターを取得しますが、そのパラメーターは使用されていません。
_twinmainは、#define to winmain(tchar.h)です。
2つの間に違いはありません。
と
_twinmainは、Unicodeが定義されていない場合はWinmainに定義され、もしそうである場合はWwinmainに定義されます。その目的は、ANSIとUnicodeの両方で構築するコードを作成できるようにすることです。