Aktualizowanie symboli WINVER i _WIN32_WINNT

W przypadku korzystania z zestawu Windows SDK można określić, w których wersjach systemu Windows można uruchomić kod. Makra preprocesora WINVER i _WIN32_WINNT określają minimalną wersję systemu operacyjnego obsługiwaną przez kod. Program Visual Studio i kompilator Microsoft C++ obsługują system Windows 7 z dodatkiem SP1 lub nowszym. Starsze zestawy narzędzi obejmują obsługę systemów Windows XP z dodatkiem SP2, Windows Server 2003 z dodatkiem SP1, Vista i Windows Server 2008. Systemy Windows 95, Windows 98, Windows ME, Windows NT i Windows 2000 nie są obsługiwane.

Podczas uaktualniania starszego projektu może być konieczne zaktualizowanie makr WINVER lub _WIN32_WINNT . Jeśli są przypisane wartości dla nieobsługiwanej wersji systemu Windows, mogą pojawić się błędy kompilacji związane z tymi makrami.

Uwagi

Aby zmodyfikować makra, w pliku nagłówka (na przykład w pliku targetver.h, który jest uwzględniony przez niektóre szablony projektów przeznaczone dla systemu Windows), dodaj następujące wiersze.

#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00

Makra w przykładzie są ustawione na każdą wersję systemu operacyjnego Windows 10. Możliwe wartości są wymienione w pliku nagłówka systemu Windows sdkddkver.h, który definiuje makra dla każdej głównej wersji systemu Windows. Aby skompilować aplikację do obsługi poprzedniej platformy systemu Windows, dołącz winSDKVer.h. Następnie ustaw makra WINVER i _WIN32_WINNT na najstarszą obsługiwaną platformę przed dołączeniem elementu sdkddkver.h. Poniżej przedstawiono wiersze z wersji zestawu SDK systemu Windows 10 zestawu SDK sdkddkver.h , które kodują wartości dla każdej wersji głównej systemu 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
// . . .

W przypadku bardziej szczegółowego podejścia do przechowywania wersji można użyć stałych wersji NTDDI w pliku sdkdkver.h. Poniżej przedstawiono niektóre makra zdefiniowane przez zestaw sdkddkver.h w zestawie Windows 10 SDK w wersji 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) )

Makra OSVER, SPVER i SUBVER mogą służyć w kodzie do kontrolowania kompilacji warunkowej dla różnych poziomów obsługi interfejsu API.

Może nie być widocznych wszystkich tych wersji systemu Windows wymienionych w pliku sdkddkver.h , na których patrzysz. Oznacza to, że prawdopodobnie używasz starszej wersji zestawu Windows SDK. (Jeśli widzisz więcej, prawdopodobnie patrzysz na nowszą wersję zestawu SDK). Domyślnie nowe projekty systemu Windows w programie Visual Studio używają najnowszego zestawu Windows SDK dostarczanego z programem Visual Studio. Aby użyć nowszego zestawu SDK, który został zainstalowany oddzielnie, musisz jawnie ustawić zestaw Windows SDK we właściwościach projektu.

Uwaga

Nie ma gwarancji, że wartości będą działać, jeśli w aplikacji dołączysz wewnętrzne nagłówki MFC.

To makro można również zdefiniować przy użyciu opcji kompilatora /D . Aby uzyskać więcej informacji, zobacz /D (Definicje preprocesora).

Aby uzyskać więcej informacji na temat znaczenia tych makr, zobacz Using the Windows Headers (Używanie nagłówków systemu Windows).

Zobacz też

Historia zmian języka Visual C++