A Windows-fejlécek használata
A Windows API fejlécfájljai lehetővé teszik 32 és 64 bites alkalmazások létrehozását. Az API Unicode- és ANSI-verzióihoz is tartalmaznak deklarációkat. További információkért lásd: Unicode a Windows API. Olyan adattípusokat használnak, amelyek lehetővé teszik az alkalmazás 32 és 64 bites verzióinak egyetlen forráskódbázisból történő összeállítását. További információkért lásd: Felkészülés a 64 bites Windowsra. További funkciók közé tartozik a fejléc-annotációk és a SZIGORÚ típusellenőrzés.
- Visual C++ és a Windows-fejlécfájlok
- Makrók feltételes deklarációkhoz
- WINVER vagy _WIN32_WINNT beállítása
- Szerkezetcsomagolás irányítása
- Gyorsabb buildek kisebb fejlécfájlokkal
- Kapcsolódó témakörök
A Microsoft Visual C++ a Visual C++ megjelenésekor aktuális Windows-fejlécfájlok másolatait tartalmazza. Ezért ha frissített fejlécfájlokat telepít egy SDK-ból, előfordulhat, hogy a Windows fejlécfájljainak több verziója is megjelenik a számítógépen. Ha nem győződik meg arról, hogy az SDK fejlécfájljainak legújabb verzióját használja, a következő hibakód jelenik meg a Visual C++ kiadását követően bevezetett funkciókat használó kód összeállításakor: C2065-ös hiba: be nem jelentett azonosító.
A Windows adott verziójától függő egyes függvények feltételes kóddal vannak deklarálva. Ez lehetővé teszi, hogy a fordító segítségével észlelje, hogy az alkalmazás olyan függvényeket használ-e, amelyek nem támogatottak a Windows célverziója(i) esetében. Az ezeket a függvényeket használó alkalmazás fordításához meg kell határoznia a megfelelő makrókat. Ellenkező esetben a C2065 hibaüzenet jelenik meg.
A Windows fejlécfájljai makrókkal jelzik, hogy a Windows mely verziói támogatnak számos programozási elemet. Ezért ezeket a makrókat úgy kell meghatároznia, hogy az egyes főbb operációsrendszer-kiadásokban bevezetett új funkciókat használhassa. (Az egyes fejlécfájlok különböző makrókat használhatnak, ezért fordítási problémák esetén ellenőrizze a feltételes definíciók definícióját tartalmazó fejlécfájlt.) További információ: SdkDdkVer.h.
Az alábbi táblázat a Windows fejlécfájljaiban használt előnyben részesített makrókat ismerteti. Ha NTDDI_VERSION definiál, _WIN32_WINNT is meg kell határoznia.
Minimális rendszer szükséges | NTDDI_VERSION értéke |
---|---|
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 "2. küszöbérték" | NTDDI_WIN10_TH2 (0x0A000001) |
Windows 10 1507 "Küszöbérték" | 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 Service Pack 1 (SP1) | NTDDI_VISTASP1 (0x06000100) |
Windows Vista | NTDDI_VISTA (0x06000000) |
Windows Server 2003 a 2-es szervizcsomaggal (SP2) | NTDDI_WS03SP2 (0x05020200) |
Windows Server 2003 Service Pack 1 (SP1) csomaggal | NTDDI_WS03SP1 (0x05020100) |
Windows Server 2003 | NTDDI_WS03 (0x05020000) |
Windows XP és Service Pack 3 (SP3) | NTDDI_WINXPSP3 (0x05010300) |
Windows XP és Service Pack 2 (SP2) | NTDDI_WINXPSP2 (0x05010200) |
Windows XP és Service Pack 1 (SP1) | NTDDI_WINXPSP1 (0x05010100) |
Windows XP | NTDDI_WINXP (0x05010000) |
Az alábbi táblázatok a Windows fejlécfájljaiban használt egyéb makrókat ismertetik.
Minimális rendszer szükséges | A _WIN32_WINNT és a WINVER minimális értéke |
---|---|
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 SP1-vel, Windows XP SP2-vel | _WIN32_WINNT_WS03 (0x0502) |
Windows Server 2003, Windows XP | _WIN32_WINNT_WINXP (0x0501) |
Minimálisan szükséges verzió | A _WIN32_IE minimális értéke |
---|---|
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) |
Ezeket a szimbólumokat az egyes forrásfájlok #define utasításával, vagy a Visual C++ által támogatott /D fordító beállítás megadásával határozhatja meg.
Ha például a WINVER-t a forrásfájlban szeretné beállítani, használja a következő utasítást:
#define WINVER 0x0502
Ha _WIN32_WINNT szeretne beállítani a forrásfájlban, használja a következő utasítást:
#define _WIN32_WINNT 0x0502
Ha a /D fordítóval szeretné beállítani _WIN32_WINNT, használja a következő parancsot:
cl -c /D_WIN32_WINNT=0x0502forrás.cpp
Az /D fordító opció használatára vonatkozó információkért lásd /D (előfeldolgozó definíciók).
Vegye figyelembe, hogy a Windows legújabb verziójában bevezetett egyes funkciók hozzáadhatók egy szervizcsomaghoz a Windows egy korábbi verziójához. Ezért, hogy egy szervizcsomagot célozzunk meg, szükség lehet _WIN32_WINNT-et a következő fő operációs rendszer kiadás értékével definiálni. A GetDllDirectory függvény például a Windows Server 2003-ban lett bevezetve, és feltételesen van meghatározva, ha _WIN32_WINNT 0x0502 vagy nagyobb. Ezt a függvényt az SP1-et tartalmazó Windows XP-hez is hozzáadták. Ezért, ha _WIN32_WINNT értékét 0x0501-re állítaná a Windows XP célzásához, kihagyná azokat a funkciókat, amelyek a Windows XP SP1-ben vannak meghatározva.
A projekteket az alapértelmezett struktúracsomagolás használatára kell fordítani, amely jelenleg 8 bájt, mivel a legnagyobb integráltípus 8 bájt. Ezzel biztosítja, hogy a fejlécfájlokban lévő összes struktúratípus az alkalmazásba a Windows API által elvárt igazítással legyen lefordítva. Azt is biztosítja, hogy a 8 bájtos értékekkel rendelkező struktúrák megfelelően legyenek igazítva, és nem okoznak igazítási hibákat az adatigazítást kényszerítő processzorokon.
További információ: /Zp (tagigazítás) vagy pack.
A Windows fejlécfájljainak méretét csökkentheti, ha kizár néhány kevésbé gyakori API-deklarációt az alábbiak szerint:
Definiálja a WIN32_LEAN_AND_MEAN-t az API-k olyan típusainak kizárásához, mint a Kryptográfia, a DDE, az RPC, a Shell, és a Windows Socket-ek.
#define WIN32_LEAN_AND_MEAN
Definiáljon egy vagy több NOAPI- szimbólumot az API kizárásához. A NOCOMM például kizárja a soros kommunikációs API-t. A noapi szimbólumok támogatásának listáját lásd: Windows.h.
#define NOCOMM