différence « APIENTRY _tWinMain » et « WINAPI WinMain »
Question
Quelles sont la différence de ces 2 fonctions:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
La solution
_tWinMain
est juste un raccourci dans #define
tchar.h à la version appropriée de WinMain
.
Si _UNICODE
est défini, puis se dilate _tWinMain
à wWinMain
. Dans le cas contraire, _tWinMain
est le même que WinMain
.
Le regard macro concerné quelque chose comme ça (il y a en fait beaucoup d'autre code entrecoupé):
#ifdef _UNICODE
#define _tWinMain wWinMain
#else
#define _tWinMain WinMain
#endif
Autres conseils
La différence est le codage des paramètres, qui sont de toute façon totalement redondant. Il suffit de jeter les paramètres et utilisez plutôt ce qui suit, où vous contrôlez l'encodage:
hInstance
est juste GetModuleHandle(0)
hPrevInstance
est pas valable dans toute façon Win32
lpCmdLine
est disponible à la fois ANSI et Unicode, via GetCommandLineA()
et GetCommandLineW()
, respectivement
nCmdShow
est le paramètre de wShowWindow
de la structure de STARTUPINFO
. Encore une fois, des variantes ANSI et Unicode, accessible à l'aide GetStartupInfoA(STARTUPINFOA*)
et GetStartupInfoW(STARTUPINFOW*)
.
Et en utilisant les API Win32 pour y accéder, vous allez probablement économiser quelques variables globales, comme celui où vous enregistrez soigneusement la poignée de l'instance que vous pensiez être disponible que pour WinMain
.
De ce lien :
_tWinMain ne fait prendre le paramètre hPrevInstance, mais isn''t paramètre utilisé.
_tWinMain est juste un #define à WinMain (en tchar.h).
Il n'y a pas de différence entre la deux.
et
_tWinMain est défini WinMain si UNICODE est pas définie, et wWinMain si elle est. son but est de vous permettent d'écrire du code qui va construire à la fois sous ansi et sous unicode.