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