Sdílet prostřednictvím


Použití hlaviček windows

Soubory hlaviček rozhraní API systému Windows umožňují vytvářet 32bitové a 64bitové aplikace. Zahrnují deklarace pro verze Unicode i ANSI rozhraní API. Další informace naleznete v tématu Unicode v rozhraní API systému Windows. Používají datové typy, které umožňují sestavit 32bitovou i 64bitovou verzi aplikace z jediného základu zdrojového kódu. Další informace naleznete v tématu Getting Ready for 64-bit Windows. Mezi další funkce patří poznámky k záhlaví a důsledné kontroly typů.

Visual C++ a hlavičkové soubory Windows

Microsoft Visual C++ obsahuje kopie hlaviček systému Windows, které byly aktuální v době vydání visual C++. Proto pokud nainstalujete aktualizované hlavičkové soubory ze sady SDK, můžete mít na počítači více verzí hlaviček systému Windows. Pokud nezajistíte, že používáte nejnovější verzi souborů hlaviček sady SDK, zobrazí se při kompilaci kódu, který používá funkce zavedené po vydání Visual C++: chyba C2065: nedeclarovaný identifikátor.

Makra pro podmíněné deklarace

Některé funkce, které závisí na konkrétní verzi Windows, jsou deklarovány pomocí podmíněného kódu. Díky tomu můžete pomocí kompilátoru zjistit, jestli vaše aplikace používá funkce, které nejsou podporovány v cílových verzích Windows. Chcete-li zkompilovat aplikaci, která tyto funkce používá, je nutné definovat příslušná makra. V opačném případě se zobrazí chybová zpráva C2065.

Soubory hlaviček systému Windows používají makra k označení, které verze Systému Windows podporují mnoho programovacích prvků. Proto je nutné definovat tato makra, aby používala nové funkce zavedené v každé hlavní verzi operačního systému. (Jednotlivé soubory hlaviček mohou používat různá makra, proto pokud dojde k problémům kompilace, zkontrolujte soubor hlaviček, který obsahuje definici podmíněných definic.) Další informace naleznete v tématu SdkDdkVer.h.

Následující tabulka popisuje upřednostňovaná makra použitá v souborech hlaviček systému Windows. Pokud definujete NTDDI_VERSION, musíte také definovat _WIN32_WINNT.

Minimální požadovaný systém Hodnota pro NTDDI_VERSION
Windows 10 1903 "19H1" NTDDI_WIN10_19H1 (0x0A000007)
Windows 10 1809 "Redstone 5" NTDDI_WIN10_RS5 (0x0A000006)
Windows 10 1803 "Redstone 4" NTDDI_WIN10_RS4 (0x0A000005)
Windows 10 1709 "Redstone 3" NTDDI_WIN10_RS3 (0x0A000004)
Windows 10 1703 "Redstone 2" NTDDI_WIN10_RS2 (0x0A000003)
Windows 10 1607 "Redstone 1" NTDDI_WIN10_RS1 (0x0A000002)
Windows 10 1511 "Prahová hodnota 2" NTDDI_WIN10_TH2 (0x0A000001)
Windows 10 1507 "Prahová hodnota" NTDDI_WIN10 (0x0A000000)
Windows 8.1 NTDDI_WINBLUE (0x06030000)
Windows 8 NTDDI_WIN8 (0x06020000)
Windows 7 NTDDI_WIN7 (0x06010000)
Windows Server 2008 NTDDI_WS08 (0x06000100)
Windows Vista s aktualizací Service Pack 1 (SP1) NTDDI_VISTASP1 (0x06000100)
Windows Vista NTDDI_VISTA (0x06000000)
Windows Server 2003 s aktualizací Service Pack 2 (SP2) NTDDI_WS03SP2 (0x05020200)
Windows Server 2003 s aktualizací Service Pack 1 (SP1) NTDDI_WS03SP1 (0x05020100)
Windows Server 2003 NTDDI_WS03 (0x05020000)
Windows XP s aktualizací Service Pack 3 (SP3) NTDDI_WINXPSP3 (0x05010300)
Windows XP s aktualizací Service Pack 2 (SP2) NTDDI_WINXPSP2 (0x05010200)
Windows XP s aktualizací Service Pack 1 (SP1) NTDDI_WINXPSP1 (0x05010100)
Windows XP NTDDI_WINXP (0x05010000)

 

Následující tabulky popisují další makra použitá v souborech hlaviček systému Windows.

Minimální požadovaný systém Minimální hodnota pro _WIN32_WINNT a WINVER
Windows 10 _WIN32_WINNT_WIN10 (0x0A00)
Windows 8.1 _WIN32_WINNT_WINBLUE (0x0603)
Windows 8 _WIN32_WINNT_WIN8 (0x0602)
Windows 7 _WIN32_WINNT_WIN7 (0x0601)
Windows Server 2008 _WIN32_WINNT_WS08 (0x0600)
Windows Vista _WIN32_WINNT_VISTA (0x0600)
Windows Server 2003 s aktualizací SP1, Windows XP s aktualizací SP2 _WIN32_WINNT_WS03 (0x0502)
Windows Server 2003, Windows XP _WIN32_WINNT_WINXP (0x0501)

 

Minimální požadovaná verze Minimální hodnota _WIN32_IE
Internet Explorer 11.0 _WIN32_IE_IE110 (0x0A00)
Internet Explorer 10.0 _WIN32_IE_IE100 (0x0A00)
Internet Explorer 9.0 _WIN32_IE_IE90 (0x0900)
Internet Explorer 8.0 _WIN32_IE_IE80 (0x0800)
Internet Explorer 7.0 _WIN32_IE_IE70 (0x0700)
Internet Explorer 6.0 SP2 _WIN32_IE_IE60SP2 (0x0603)
Internet Explorer 6.0 SP1 _WIN32_IE_IE60SP1 (0x0601)
Internet Explorer 6.0 _WIN32_IE_IE60 (0x0600)
Internet Explorer 5.5 _WIN32_IE_IE55 (0x0550)
Internet Explorer 5.01 _WIN32_IE_IE501 (0x0501)
Internet Explorer 5.0, 5.0a, 5.0b _WIN32_IE_IE50 (0x0500)

 

Nastavení WINVER nebo _WIN32_WINNT

Tyto symboly můžete definovat pomocí příkazu #define v každém zdrojovém souboru nebo zadáním možnosti kompilátoru /D podporované jazykem Visual C++.

Pokud chcete například nastavit WINVER ve zdrojovém souboru, použijte následující příkaz:

#define WINVER 0x0502

Pokud chcete nastavit _WIN32_WINNT ve zdrojovém souboru, použijte následující příkaz:

#define _WIN32_WINNT 0x0502

Pokud chcete nastavit _WIN32_WINNT pomocí možnosti kompilátoru /D, použijte následující příkaz:

cl -c /D_WIN32_WINNT=0x0502zdroj.cpp

Informace o použití možnosti kompilátoru /D najdete v tématu /D (definice preprocesoru).

Upozorňujeme, že některé funkce představené v nejnovější verzi Systému Windows mohou být přidány do aktualizace Service Pack pro předchozí verzi Systému Windows. Proto pokud chcete cílit na aktualizaci Service Pack, možná budete muset definovat _WIN32_WINNT s hodnotou pro další hlavní verzi operačního systému. Například funkce GetDllDirectory byla zavedena v systému Windows Server 2003 a je podmíněně definována, pokud je _WIN32_WINNT 0x0502 nebo vyšší. Tato funkce byla také přidána do systému Windows XP s aktualizací SP1. Proto pokud byste chtěli definovat _WIN32_WINNT jako 0x0501 cílit na systém Windows XP, chyběly by funkce definované v systému Windows XP s aktualizací SP1.

Řízení struktury balení

Projekty by měly být zkompilovány tak, aby používaly výchozí balení struktury, což je aktuálně 8 bajtů, protože největší celočíselný typ je 8 bajtů. Tím zajistíte, že se všechny typy struktur v souborech hlaviček zkompilují do aplikace se stejným zarovnáním, jaké rozhraní API systému Windows očekává. Zajišťuje také správné zarovnání struktur s 8-bajtovými hodnotami a nezpůsobí chyby zarovnání na procesorech, které vynucují zarovnání dat.

Další informace naleznete v tématu /Zp (zarovnání člena struktury) nebo pack.

Rychlejší sestavení s menšími soubory hlaviček

Velikost souborů hlaviček Systému Windows můžete zmenšit vyloučením některých méně běžných deklarací rozhraní API následujícím způsobem:

  • Definujte WIN32_LEAN_AND_MEAN pro vyloučení rozhraní API, jako jsou kryptografie, DDE, RPC, Shell a Windows Sockets.

    #define WIN32_LEAN_AND_MEAN

  • Definujte jeden nebo více symbolů API pro vyloučení rozhraní API. NOCOMM například vylučuje rozhraní API pro sériovou komunikaci. Seznam podpůrných symbolůrozhraní API najdete v tématu Windows.h.

    #define NOCOMM

web pro stažení sady Windows SDK