Condividi tramite


Uso delle intestazioni di Windows

I file di intestazione per l'API Di Windows consentono di creare applicazioni a 32 e a 64 bit. Includono dichiarazioni per le versioni Unicode e ANSI dell'API. Per altre informazioni, vedere Unicode nell'API Windows. Usano tipi di dati che consentono di compilare versioni a 32 e a 64 bit dell'applicazione da una singola codebase sorgente. Per altre informazioni, vedere Preparazione per Windows a 64 bit. Altre funzionalità includono annotazioni di intestazione e controllo dei tipi STRICT.

Visual C++ e i file di intestazione di Windows

Microsoft Visual C++ include copie dei file di intestazione di Windows correnti al momento del rilascio di Visual C++. Pertanto, se installi i file di intestazione aggiornati da un SDK, potresti finire con più versioni dei file di intestazione di Windows nel computer. Se non si garantisce di usare la versione più recente dei file di intestazione dell'SDK, si riceverà il codice di errore seguente durante la compilazione del codice che usa funzionalità introdotte dopo il rilascio di Visual C++: errore C2065: identificatore non dichiarato.

Macro per le dichiarazioni condizionali

Alcune funzioni che dipendono da una determinata versione di Windows vengono dichiarate usando il codice condizionale. In questo modo è possibile usare il compilatore per rilevare se l'applicazione usa funzioni non supportate nelle versioni di destinazione di Windows. Per compilare un'applicazione che usa queste funzioni, è necessario definire le macro appropriate. In caso contrario, verrà visualizzato il messaggio di errore C2065.

I file di intestazione di Windows usano macro per indicare quali versioni di Windows supportano molti elementi di programmazione. Pertanto, è necessario definire queste macro per usare nuove funzionalità introdotte in ogni versione principale del sistema operativo. I singoli file di intestazione possono usare macro diverse, pertanto, se si verificano problemi di compilazione, controllare il file di intestazione che contiene la definizione per le definizioni condizionali. Per altre informazioni, vedere SdkDdkVer.h.

Nella tabella seguente vengono descritte le macro preferite usate nei file di intestazione di Windows. Se si definiscono NTDDI_VERSION, è necessario definire anche _WIN32_WINNT.

Sistema minimo obbligatorio Valore per 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 "Soglia 2" NTDDI_WIN10_TH2 (0x0A000001)
Windows 10 1507 "Soglia" 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 con Service Pack 1 (SP1) NTDDI_VISTASP1 (0x06000100)
Windows Vista NTDDI_VISTA (0x06000000)
Windows Server 2003 con Service Pack 2 (SP2) NTDDI_WS03SP2 (0x05020200)
Windows Server 2003 con Service Pack 1 (SP1) NTDDI_WS03SP1 (0x05020100)
Windows Server 2003 NTDDI_WS03 (0x05020000)
Windows XP con Service Pack 3 (SP3) NTDDI_WINXPSP3 (0x05010300)
Windows XP con Service Pack 2 (SP2) NTDDI_WINXPSP2 (0x05010200)
Windows XP con Service Pack 1 (SP1) NTDDI_WINXPSP1 (0x05010100)
Windows XP NTDDI_WINXP (0x05010000)

 

Le tabelle seguenti descrivono altre macro usate nei file di intestazione di Windows.

Sistema minimo obbligatorio Valore minimo per _WIN32_WINNT e 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 con SP1, Windows XP con SP2 _WIN32_WINNT_WS03 (0x0502)
Windows Server 2003, Windows XP _WIN32_WINNT_WINXP (0x0501)

 

Versione minima necessaria Valore minimo di _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)

 

Impostazione di WINVER o _WIN32_WINNT

È possibile definire questi simboli usando l'istruzione #define in ogni file di origine o specificando l'opzione del compilatore /D supportata da Visual C++.

Ad esempio, per impostare WINVER nel file di origine, usare l'istruzione seguente:

#define WINVER 0x0502

Per impostare _WIN32_WINNT nel file di origine, usare l'istruzione seguente:

#define _WIN32_WINNT 0x0502

Per impostare _WIN32_WINNT usando l'opzione del compilatore /D, usare il comando seguente:

cl -c /D_WIN32_WINNT=0x0502 source.cpp

Per informazioni sull'uso dell'opzione del compilatore /D, vedere /D (definizioni del preprocessore).

Si noti che alcune funzionalità introdotte nella versione più recente di Windows possono essere aggiunte a un Service Pack per una versione precedente di Windows. Pertanto, per impostare come destinazione un Service Pack, potrebbe essere necessario definire _WIN32_WINNT con il valore per la versione successiva del sistema operativo principale. Ad esempio, la funzione GetDllDirectory è stata introdotta in Windows Server 2003 ed è definita in modo condizionale se _WIN32_WINNT è 0x0502 o versione successiva. Questa funzione è stata aggiunta anche a Windows XP con SP1. Pertanto, se si dovesse definire _WIN32_WINNT come 0x0501 di destinazione Windows XP, si perderebbero le funzionalità definite in Windows XP con SP1.

Controllo della compressione della struttura

I progetti devono essere compilati per utilizzare la compressione della struttura predefinita, che è attualmente di 8 byte perché il tipo integrale più grande è di 8 byte. In questo modo si garantisce che tutti i tipi di struttura all'interno dei file di intestazione vengano compilati nell'applicazione con lo stesso allineamento previsto dall'API di Windows. Garantisce inoltre che le strutture con valori a 8 byte siano allineate correttamente e non causeranno errori di allineamento sui processori che applicano l'allineamento dei dati.

Per altre informazioni, vedere /Zp (allineamento membri struct) o pack.

Compilazioni più veloci con file di intestazione più piccoli

È possibile ridurre le dimensioni dei file di intestazione di Windows escludendo alcune delle dichiarazioni API meno comuni come indicato di seguito:

  • Definire WIN32_LEAN_AND_MEAN per escludere API come Cryptography, DDE, RPC, Shell e Windows Sockets.

    #define WIN32_LEAN_AND_MEAN

  • Definire uno o più simboli API NO per escludere l'API. Ad esempio, NOCOMM esclude l'API di comunicazione seriale. Per un elenco dei simboli API NO di supporto, vedere Windows.h.

    #define NOCOMM

Sito di download di Windows SDK