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
- Makros für bedingte Deklarationen
- Festlegen von WINVER oder _WIN32_WINNT
- Steuern des Strukturpackens
- Schnellere Builds mit kleineren Headerdateien
- Zugehörige Themen
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
Zugehörige Themen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für