WinMain 應用程式進入點
每個 Windows 程式都包含名為 WinMain 或 wWinMain的進入點函式。 下列程式碼顯示 wWinMain的簽章:
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow);
四個 wWinMain 參數如下所示:
- hInstance 是實例或模組句 柄的控制碼 。 作業系統會在載入記憶體時,使用此值來識別可執行檔或 EXE。 某些 Windows 函式需要實例控制碼,例如載入圖示或點陣圖。
- hPrevInstance 沒有意義。 它用於 16 位 Windows,但現在一律為零。
- pCmdLine 包含命令列引數做為 Unicode 字串。
- nCmdShow 是旗標,指出主應用程式視窗是否最小化、最大化或正常顯示。
函式會傳 int
回值。 作業系統不會使用傳回值,但您可以使用 值將狀態碼傳遞至另一個程式。
呼叫慣例,例如 WINAPI
,定義函式如何從呼叫端接收參數。 例如,呼叫慣例會定義參數出現在堆疊上的順序。 請務必宣告 wWinMain 函 式,如上述範例所示。
WinMain函式與wWinMain相同,但命令列引數會以 ANSI 字串的形式傳遞。 慣用 Unicode 字串。 即使您將程式編譯為 Unicode,也可以使用 ANSI WinMain 函 式。 若要取得命令列引數的 Unicode 複本,請呼叫 GetCommandLine 函式。 此函式會傳回單一字串中的所有引數。 如果您想要引數做為 argv樣式陣列,請將此字串傳遞至 CommandLineToArgvW。
編譯器如何知道叫用 wWinMain 而不是標準 main 函式? 實際上,Microsoft C 執行時間程式庫 (CRT) 提供呼叫WinMain或wWinMain之 main的實作。
CRT 在 main中執行一些更多工作。 例如,它會在 wWinMain之前呼叫任何靜態初始化運算式。 雖然您可以告訴連結器使用不同的進入點函式,但如果您連結至 CRT,您應該使用預設值。 否則會略過 CRT 初始化程式碼,並產生無法預期的結果,例如未正確初始化全域物件。
下列程式碼顯示空的 WinMain 函 式:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR lpCmdLine, int nCmdShow)
{
return 0;
}
既然您已進入點並瞭解一些基本術語和程式碼撰寫慣例,即可開始 建立您的第一個 Windows 程式。