Share via


WinMain 應用程式進入點

每個 Windows 程式都包含名為 WinMainwWinMain的進入點函式。 下列程式碼顯示 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) 提供呼叫WinMainwWinMain之 main的實作。

CRT 在 main中執行一些更多工作。 例如,它會在 wWinMain之前呼叫任何靜態初始化運算式。 雖然您可以告訴連結器使用不同的進入點函式,但如果您連結至 CRT,您應該使用預設值。 否則會略過 CRT 初始化程式碼,並產生無法預期的結果,例如未正確初始化全域物件。

下列程式碼顯示空的 WinMain 函 式:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR lpCmdLine, int nCmdShow)
{
    return 0;
}

既然您已進入點並瞭解一些基本術語和程式碼撰寫慣例,即可開始 建立您的第一個 Windows 程式