Freigeben über


Aktualisieren von WINVER und _WIN32_WINNT

Wenn Sie das Windows SDK verwenden, können Sie angeben, auf welchen Versionen Von Windows Ihr Code ausgeführt werden kann. Die Präprozessormakros WINVER und _WIN32_WINNT die vom Code unterstützte Mindestversion des Betriebssystems angeben. Visual Studio und der Microsoft C++-Compiler unterstützen Windows 7 SP1 und höher. Ältere Toolsets umfassen Unterstützung für Windows XP SP2, Windows Server 2003 SP1, Vista und Windows Server 2008. Windows 95, Windows 98, Windows ME, Windows NT und Windows 2000 werden nicht unterstützt.

Wenn Sie ein älteres Projekt aktualisieren, müssen Sie möglicherweise Ihre WINVER - oder _WIN32_WINNT-Makros aktualisieren. Wenn ihnen Werte für eine nicht unterstützte Version von Windows zugewiesen sind, werden möglicherweise Kompilierungsfehler im Zusammenhang mit diesen Makros angezeigt.

Hinweise

Um die Makros zu ändern, fügen Sie in einer Headerdatei (z. B. in targetver.h, die von einigen Projektvorlagen für Windows enthalten ist) die folgenden Zeilen hinzu.

#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00

Die Makros im Beispiel werden auf jede Version des Windows 10-Betriebssystems festgelegt. Die möglichen Werte werden in der Windows-Headerdatei sdkddkver.h aufgeführt, die Makros für jede Hauptversion von Windows definiert. Um Ihre Anwendung zu erstellen, um eine frühere Windows-Plattform zu unterstützen, schließen Sie WinSDKVer.h ein. Legen Sie dann die WINVER- und _WIN32_WINNT Makros auf die älteste unterstützte Plattform fest, bevor Sie sdkddkver.h einschließen. Hier sind die Zeilen aus der Windows 10 SDK-Version von sdkddkver.h , die die Werte für jede Hauptversion von Windows codieren:

//
// _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
// . . .

Für einen feineren Ansatz zur Versionsverwaltung können Sie die NTDDI-Versionskonstanten in sdkddkver.h verwenden. Hier sind einige der Makros, die von sdkddkver.h in Windows 10 SDK Version 10.0.18362.0 definiert wurden:

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

Die OSVER-, SPVER- und SUBVER-Makros können in Ihrem Code verwendet werden, um die bedingte Kompilierung für verschiedene API-Unterstützungsebenen zu steuern.

Möglicherweise werden nicht alle diese Versionen von Windows in der sdkddkver.h aufgeführt, die Sie betrachten. Das bedeutet, dass Sie wahrscheinlich eine ältere Version des Windows SDK verwenden. (Wenn Sie mehr sehen, sehen Sie wahrscheinlich eine neuere Version des SDK.) Standardmäßig verwenden neue Windows-Projekte in Visual Studio das neueste Windows SDK, das im Lieferumfang von Visual Studio enthalten ist. Um ein neueres SDK zu verwenden, das Sie separat installiert haben, müssen Sie das Windows SDK explizit in Den Projekteigenschaften festlegen.

Hinweis

Es ist nicht gewährleistet, dass die Werte auf jeden Fall funktionieren, wenn Sie interne MFC-Header in die Anwendung aufnehmen.

Dieses Makro kann auch mithilfe der /D-Compileroption definiert werden. Weitere Informationen finden Sie unter /D (Preprocessor Definitions).

Weitere Informationen zur Bedeutung dieser Makros finden Sie unter Verwenden der Windows-Header.

Siehe auch

Änderungsverlauf von Visual C++