“APIENTRY _tWinMain” e “WINAPI WinMain” differenza
Domanda
Quali sono le differenze da queste 2 funzioni:?
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
Soluzione
_tWinMain
è solo una scorciatoia #define
in tchar.h alla versione appropriata di WinMain
.
Se _UNICODE
è definita, espande _tWinMain
a wWinMain
. In caso contrario, _tWinMain
è lo stesso di WinMain
.
L'aspetto macro rilevanti qualcosa di simile (c'è in realtà un sacco di altro codice intervallati):
#ifdef _UNICODE
#define _tWinMain wWinMain
#else
#define _tWinMain WinMain
#endif
Altri suggerimenti
La differenza è la codifica dei parametri, che sono completamente comunque ridondanti. Basta buttare via i parametri e di utilizzare invece il seguente, dove si controlla la codifica:
hInstance
è solo GetModuleHandle(0)
hPrevInstance
non è valido per Win32 comunque
lpCmdLine
è disponibile sia ANSI e Unicode, tramite rispettivamente GetCommandLineA()
e GetCommandLineW()
,
nCmdShow
è il parametro wShowWindow
della struttura STARTUPINFO
. Ancora una volta, ANSI e Unicode varianti, accedere utilizzando GetStartupInfoA(STARTUPINFOA*)
e GetStartupInfoW(STARTUPINFOW*)
.
E utilizzando le API Win32 di accedere a questi, probabilmente stai andando a salvare un paio di variabili globali, come quella in cui si stava salvando con attenzione il handle di istanza che si pensava fosse disponibile solo per WinMain
.
_tWinMain in realtà ci vuole il parametro hPrevInstance, ma che parametro isn''t utilizzato.
_tWinMain è solo un # define a WinMain (in tchar.h).
Non v'è alcuna differenza tra il due.
e
_tWinMain è definito per WinMain se UNICODE non è definita, e per wWinMain se lo è. il suo scopo è quello consentono di scrivere codice che costruirà sia sotto ansi e sotto unicode.