„APIENTRY _tWinMain“ und „WINAPI WinMain“ Differenz
Frage
Was ist die Differenz aus dieser 2 Funktion:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
Lösung
_tWinMain
ist nur eine #define
Abkürzung in tchar.h auf die entsprechende Version von WinMain
.
Wenn _UNICODE
definiert ist, dann _tWinMain
expandiert nach wWinMain
. Ansonsten _tWinMain
ist die gleiche wie WinMain
.
Die entsprechende Makro sieht ungefähr so ??aus (es gibt tatsächlich eine Menge anderen Code eingefügt):
#ifdef _UNICODE
#define _tWinMain wWinMain
#else
#define _tWinMain WinMain
#endif
Andere Tipps
Der Unterschied ist die Codierung der Parameter, die ohnehin völlig überflüssig sind. Werfen Sie einfach die Parameter und stattdessen die folgenden verwenden, in dem Sie die Codierung steuern:
hInstance
ist nur GetModuleHandle(0)
hPrevInstance
ist nicht gültig in Win32 sowieso
lpCmdLine
ist sowohl in ANSI und Unicode verfügbar, über GetCommandLineA()
und GetCommandLineW()
bzw.
nCmdShow
ist der wShowWindow
Parameter der STARTUPINFO
Struktur. Auch hier, ANSI und Unicode-Varianten zugegriffen GetStartupInfoA(STARTUPINFOA*)
und GetStartupInfoW(STARTUPINFOW*)
verwendet wird.
Und durch den Win32-APIs diese zuzugreifen, sind Sie wahrscheinlich ein paar globalen Variablen speichern gehen, wie die, wo man genau die Instanz Griff sparten haben Sie nur zu WinMain
verfügbar waren.
_tWinMain hat tatsächlich den hPrevInstance Parameter nehmen, aber das Parameter isn''t verwendet.
_tWinMain ist nur ein #define zu WinMain (in tchar.h).
Es gibt keinen Unterschied zwischen dem zwei.
und
_tWinMain an WinMain definiert, wenn UNICODE nicht definiert ist, und wWinMain wenn es ist. dessen Zweck es ist, können Sie Code schreiben, bauen beide unter ansi und unter Unicode.