Vstupní bod aplikace WinMain
Každý program Windows obsahuje funkci vstupního bodu s názvem WinMain nebo wWinMain. Následující kód ukazuje podpis pro wWinMain:
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow);
Čtyři parametry wWinMain jsou následující:
- hInstance je referenční ukazatel na instanci nebo referenční ukazatel na modul. Operační systém používá tuto hodnotu k identifikaci spustitelného souboru nebo exe při načtení do paměti. Některé funkce systému Windows potřebují popisovač instance, například pro načtení ikon nebo bitových map.
- hPrevInstance nemá žádný význam. Používala se v 16bitovém Systému Windows, ale teď je vždy nula.
- pCmdLine obsahuje argumenty příkazového řádku jako řetězec Unicode.
- nCmdShow je příznak, který označuje, jestli je hlavní okno aplikace minimalizované, maximalizované nebo zobrazené normálně.
Funkce vrátí int
hodnotu. Operační systém nepoužívá návratovou hodnotu, ale hodnotu můžete použít k předání stavového kódu jinému programu.
konvence volání, například WINAPI
, definuje, jak funkce přijímá parametry od volajícího. Konvence volání například definuje pořadí, ve které se parametry zobrazují v zásobníku. Nezapomeňte deklarovat funkci wWinMain, jak je znázorněno v předchozím příkladu.
Funkce WinMain je stejná jako funkce wWinMain, s výjimkou argumentů příkazového řádku se předávají jako řetězec ANSI. Preferuje se řetězec Unicode. Funkci WinMain můžete použít ANSI, i když program zkompilujete jako Unicode. Pokud chcete získat kopii argumentů příkazového řádku unicode, zavolejte funkci GetCommandLine. Tato funkce vrátí všechny argumenty v jednom řetězci. Pokud chcete argumenty ve formátu pole ve stylu argv, předejte tento řetězec funkci CommandLineToArgvW.
Jak kompilátor ví, že má vyvolat wWinMain místo standardní funkce main? Ve skutečnosti se stane, že runtime knihovna Microsoft C (CRT) poskytuje implementaci main, která volá buď WinMain, nebo wWinMain.
CRT dělá více práce uvnitř hlavní . Například volá všechny statické inicializátory před wWinMain. I když můžete překladači říct, aby používal jinou funkci vstupního bodu, měli byste použít výchozí, pokud připojujete k CRT. Jinak se kód inicializace CRT přeskočí s nepředvídatelnými výsledky, jako jsou například globální objekty, které nejsou inicializovány správně.
Následující kód ukazuje prázdnou funkci WinMain:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR lpCmdLine, int nCmdShow)
{
return 0;
}
Teď, když máte vstupní bod a rozumíte některým základním terminologiím a konvencím kódování, jste připraveni Vytvořit svůj první program pro Windows.