Olvasás angol nyelven

Megosztás a következőn keresztül:


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ájljai

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ó.

Makrók feltételes deklarációkhoz

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)

 

WINVER vagy _WIN32_WINNT beállítása

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.

Szerkezetcsomagolás szabályozása

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.

Gyorsabb buildek kisebb fejlécfájlokkal

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

Windows SDK letöltési webhely