Verwenden der Windows-Header

Mit den Headerdateien für die Windows-API können Sie 32- und 64-Bit-Anwendungen erstellen. Sie enthalten Deklarationen für Unicode- und ANSI-Versionen der API. Weitere Informationen finden Sie unter Unicode in der Windows-API. Sie verwenden Datentypen , mit denen Sie sowohl 32- als auch 64-Bit-Versionen Ihrer Anwendung aus einer einzigen Quellcodebasis erstellen können. Weitere Informationen finden Sie unter Vorbereiten für 64-Bit-Windows. Weitere Features sind Headeranmerkungen und STRICT Type Checking.

Visual C++ und die Windows-Headerdateien

Microsoft Visual C++ enthält Kopien der Windows-Headerdateien, die zum Zeitpunkt der Veröffentlichung von Visual C++ aktuell waren. Wenn Sie aktualisierte Headerdateien aus einem SDK installieren, können Sie daher mehrere Versionen der Windows-Headerdateien auf Ihrem Computer erhalten. Wenn Sie nicht sicherstellen, dass Sie die neueste Version der SDK-Headerdateien verwenden, erhalten Sie den folgenden Fehlercode beim Kompilieren von Code, der Features verwendet, die nach der Veröffentlichung von Visual C++ eingeführt wurden: Fehler C2065: Nicht deklarierter Bezeichner.

Makros für bedingte Deklarationen

Bestimmte Funktionen, die von einer bestimmten Windows-Version abhängen, werden mit bedingtem Code deklariert. Dadurch können Sie den Compiler verwenden, um zu erkennen, ob Ihre Anwendung Funktionen verwendet, die in ihren Zielversionen von Windows nicht unterstützt werden. Um eine Anwendung zu kompilieren, die diese Funktionen verwendet, müssen Sie die entsprechenden Makros definieren. Andernfalls wird die Fehlermeldung C2065 angezeigt.

Die Windows-Headerdateien verwenden Makros, um anzugeben, welche Versionen von Windows viele Programmierelemente unterstützen. Daher müssen Sie diese Makros definieren, um neue Funktionen zu verwenden, die in jedem Hauptversion des Betriebssystems eingeführt wurden. (Einzelne Headerdateien können unterschiedliche Makros verwenden. Überprüfen Sie daher bei Kompilierungsproblemen die Headerdatei, die die Definition enthält, auf bedingte Definitionen.) Weitere Informationen finden Sie unter SdkDdkVer.h.

In der folgenden Tabelle werden die bevorzugten Makros beschrieben, die in den Windows-Headerdateien verwendet werden. Wenn Sie NTDDI_VERSION definieren, müssen Sie auch _WIN32_WINNT definieren.

Mindestsystem erforderlich Wert für 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 "Schwellenwert 2" NTDDI_WIN10_TH2 (0x0A000001)
Windows 10 1507 "Schwellenwert" NTDDI_WIN10 (0x0A000000)
Windows 8.1 NTDDI_WINBLUE (0x06030000)
Windows 8 NTDDI_WIN8 (0x06020000)
Windows 7 NTDDI_WIN7 (0x06010000)
WindowsServer 2008 NTDDI_WS08 (0x06000100)
Windows Vista mit Service Pack 1 (SP1) NTDDI_VISTASP1 (0x06000100)
Windows Vista NTDDI_VISTA (0x06000000)
Windows Server 2003 mit Service Pack 2 (SP2) NTDDI_WS03SP2 (0x05020200)
Windows Server 2003 mit Service Pack 1 (SP1) NTDDI_WS03SP1 (0x05020100)
Windows Server 2003 NTDDI_WS03 (0x05020000)
Windows XP mit Service Pack 3 (SP3) NTDDI_WINXPSP3 (0x05010300)
Windows XP mit Service Pack 2 (SP2) NTDDI_WINXPSP2 (0x05010200)
Windows XP mit Service Pack 1 (SP1) NTDDI_WINXPSP1 (0x05010100)
Windows XP NTDDI_WINXP (0x05010000)

 

In den folgenden Tabellen werden andere Makros beschrieben, die in den Windows-Headerdateien verwendet werden.

Mindestsystem erforderlich Mindestwert für _WIN32_WINNT und 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)
WindowsServer 2008 _WIN32_WINNT_WS08 (0x0600)
Windows Vista _WIN32_WINNT_VISTA (0x0600)
Windows Server 2003 mit SP1, Windows XP mit SP2 _WIN32_WINNT_WS03 (0x0502)
Windows Server 2003, Windows XP _WIN32_WINNT_WINXP (0x0501)

 

Mindestversion Mindestwert von _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)

 

Festlegen von WINVER oder _WIN32_WINNT

Sie können diese Symbole definieren, indem Sie die #define-Anweisung in jeder Quelldatei verwenden oder die von Visual C++ unterstützte Compileroption /D angeben.

Verwenden Sie beispielsweise die folgende Anweisung, um WINVER in Ihrer Quelldatei festzulegen:

#define WINVER 0x0502

Verwenden Sie die folgende Anweisung, um _WIN32_WINNT in Ihrer Quelldatei festzulegen:

#define _WIN32_WINNT 0x0502

Verwenden Sie den folgenden Befehl, um _WIN32_WINNT mithilfe der Compileroption /D festzulegen:

cl -c /D_WIN32_WINNT=0x0502source.cpp

Informationen zur Verwendung der Compileroption /D finden Sie unter /D (Präprozessordefinitionen).

Beachten Sie, dass einige Features, die in der neuesten Version von Windows eingeführt wurden, möglicherweise einem Service Pack für eine frühere Version von Windows hinzugefügt werden. Daher müssen Sie für ein Service Pack möglicherweise _WIN32_WINNT mit dem Wert für die nächste Hauptversion des Betriebssystems definieren. Beispielsweise wurde die GetDllDirectory-Funktion in Windows Server 2003 eingeführt und ist bedingt definiert, wenn _WIN32_WINNT 0x0502 oder höher ist. Diese Funktion wurde auch windows XP mit SP1 hinzugefügt. Wenn Sie also _WIN32_WINNT als 0x0501 für Windows XP definieren würden, würden Sie Features vermissen, die in Windows XP mit SP1 definiert sind.

Steuern der Strukturverpackung

Projekte sollten kompiliert werden, um die Standardstrukturverpackung zu verwenden, die derzeit 8 Bytes beträgt, da der größte integrale Typ 8 Byte ist. Auf diese Weise wird sichergestellt, dass alle Strukturtypen innerhalb der Headerdateien in die Anwendung kompiliert werden, mit der gleichen Ausrichtung, die die Windows-API erwartet. Außerdem wird sichergestellt, dass Strukturen mit 8-Byte-Werten ordnungsgemäß ausgerichtet sind und keine Ausrichtungsfehler auf Prozessoren verursachen, die die Datenausrichtung erzwingen.

Weitere Informationen finden Sie unter /Zp (Strukturmemberausrichtung) oder Pack.

Schnellere Builds mit kleineren Headerdateien

Sie können die Größe der Windows-Headerdateien verringern, indem Sie einige der weniger häufig verwendeten API-Deklarationen wie folgt ausschließen:

  • Definieren Sie WIN32_LEAN_AND_MEAN, um APIs wie Kryptografie, DDE, RPC, Shell und Windows Sockets auszuschließen.

    #define WIN32_LEAN_AND_MEAN

  • Definieren Sie mindestens eines derNO-API-Symbole , um die API auszuschließen. Beispielsweise schließt NOCOMM die serielle Kommunikations-API aus. Eine Liste derUnterstützungs-NO-API-Symbole finden Sie unter Windows.h.

    #define NOCOMM

Windows SDK-Downloadwebsite