Condividi tramite


Aggiornare WINVER e _WIN32_WINNT

Quando si usa Windows SDK, è possibile specificare le versioni di Windows in cui è possibile eseguire il codice. Le macro del preprocessore WINVER e _WIN32_WINNT specificano la versione minima del sistema operativo supportata dal codice. Visual Studio e il compilatore Microsoft C++ supportano windows 7 SP1 e versioni successive. I set di strumenti meno recenti includono il supporto per Windows XP SP2, Windows Server 2003 SP1, Vista e Windows Server 2008. Windows 95, Windows 98, Windows ME, Windows NT e Windows 2000 non sono supportati.

Quando si aggiorna un progetto meno recente, potrebbe essere necessario aggiornare le macro WINVER o _WIN32_WINNT . Se vengono assegnati valori per una versione non supportata di Windows, è possibile che vengano visualizzati errori di compilazione correlati a queste macro.

Osservazioni:

Per modificare le macro, in un file di intestazione (ad esempio, in targetver.h, incluso da alcuni modelli di progetto destinati a Windows), aggiungere le righe seguenti.

#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00

Le macro nell'esempio sono impostate come destinazione per ogni versione del sistema operativo Windows 10. I valori possibili sono elencati nel file di intestazione di Windows sdkddkver.h, che definisce le macro per ogni versione principale di Windows. Per compilare l'applicazione per supportare una piattaforma Windows precedente, includere WinSDKVer.h. Impostare quindi le macro WINVER e _WIN32_WINNT sulla piattaforma supportata meno recente prima di includere sdkddkver.h. Ecco le righe della versione di Windows 10 SDK di sdkddkver.h che codificano i valori per ogni versione principale di Windows:

//
// _WIN32_WINNT version constants
//
#define _WIN32_WINNT_NT4                    0x0400 // Windows NT 4.0
#define _WIN32_WINNT_WIN2K                  0x0500 // Windows 2000
#define _WIN32_WINNT_WINXP                  0x0501 // Windows XP
#define _WIN32_WINNT_WS03                   0x0502 // Windows Server 2003
#define _WIN32_WINNT_WIN6                   0x0600 // Windows Vista
#define _WIN32_WINNT_VISTA                  0x0600 // Windows Vista
#define _WIN32_WINNT_WS08                   0x0600 // Windows Server 2008
#define _WIN32_WINNT_LONGHORN               0x0600 // Windows Vista
#define _WIN32_WINNT_WIN7                   0x0601 // Windows 7
#define _WIN32_WINNT_WIN8                   0x0602 // Windows 8
#define _WIN32_WINNT_WINBLUE                0x0603 // Windows 8.1
#define _WIN32_WINNT_WINTHRESHOLD           0x0A00 // Windows 10
#define _WIN32_WINNT_WIN10                  0x0A00 // Windows 10
// . . .

Per un approccio più dettagliato al controllo delle versioni, è possibile usare le costanti della versione NTDDI in sdkddkver.h. Ecco alcune delle macro definite da sdkddkver.h in Windows 10 SDK versione 10.0.18362.0:

//
// NTDDI version constants
//
#define NTDDI_WIN7                          0x06010000
#define NTDDI_WIN8                          0x06020000
#define NTDDI_WINBLUE                       0x06030000
#define NTDDI_WINTHRESHOLD                  0x0A000000  /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10                         0x0A000000  /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10_TH2                     0x0A000001  /* ABRACADABRA_WIN10_TH2 */
#define NTDDI_WIN10_RS1                     0x0A000002  /* ABRACADABRA_WIN10_RS1 */
#define NTDDI_WIN10_RS2                     0x0A000003  /* ABRACADABRA_WIN10_RS2 */
#define NTDDI_WIN10_RS3                     0x0A000004  /* ABRACADABRA_WIN10_RS3 */
#define NTDDI_WIN10_RS4                     0x0A000005  /* ABRACADABRA_WIN10_RS4 */
#define NTDDI_WIN10_RS5                     0x0A000006  /* ABRACADABRA_WIN10_RS5 */
#define NTDDI_WIN10_19H1                    0x0A000007  /* ABRACADABRA_WIN10_19H1*/

#define WDK_NTDDI_VERSION                   NTDDI_WIN10_19H1 /* ABRACADABRA_WIN10_19H1 */

//
// masks for version macros
//
#define OSVERSION_MASK      0xFFFF0000
#define SPVERSION_MASK      0x0000FF00
#define SUBVERSION_MASK     0x000000FF

//
// macros to extract various version fields from the NTDDI version
//
#define OSVER(Version)  ((Version) & OSVERSION_MASK)
#define SPVER(Version)  (((Version) & SPVERSION_MASK) >> 8)
#define SUBVER(Version) (((Version) & SUBVERSION_MASK) )

Le macro OSVER, SPVER e SUBVER possono essere usate nel codice per controllare la compilazione condizionale per diversi livelli di supporto api.

Potresti non visualizzare tutte queste versioni di Windows elencate in sdkddkver.h che stai esaminando. Ciò significa che probabilmente si usa una versione precedente di Windows SDK. Se vedi di più, probabilmente stai esaminando una versione più recente dell'SDK. Per impostazione predefinita, i nuovi progetti Windows in Visual Studio usano la versione più recente di Windows SDK fornita con Visual Studio. Per usare un SDK più recente installato separatamente, è necessario impostare Windows SDK in modo esplicito nelle proprietà del progetto.

Nota

I valori potrebbero non funzionare se si includono intestazioni MFC interne nell'applicazione.

È anche possibile definire questa macro con l'opzione del compilatore /D. Per altre informazioni, vedere /D (Preprocessor Definitions).

Per altre informazioni sul significato delle macro, vedere Uso delle intestazioni di Windows.

Vedi anche

Cronologia delle modifiche di Visual C++