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 Vorbereitungen für 64-Bit-Windows. Weitere Funktionen sind Headeranmerkungen und STRENGE Typüberprüfung.
- Visual C++ und die Windows-Headerdateien
- Makros für bedingte Deklarationen
- Festlegen von WINVER oder _WIN32_WINNT
- Steuern des Packens von Strukturen
- Schnellere Builds mit kleineren Headerdateien
- Verwandte 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, haben Sie daher möglicherweise mehrere Versionen der Windows-Headerdateien auf Ihrem Computer. Wenn Sie nicht die neueste Version der SDK-Headerdateien verwenden, erhalten Sie beim Kompilieren von Codes, die nach der Veröffentlichung von Visual C++ eingeführte Funktionen verwenden, folgenden Fehlercode: „Fehler C2065 – nicht deklarierter Bezeichner“.
Makros für bedingte Deklarationen
Bestimmte Funktionen, die von einer bestimmten Version von Windows abhängen, werden mit bedingten Codes deklariert. Auf diese Weise können Sie mithilfe des Compilers ermitteln, ob Ihre Anwendung Funktionen verwendet, die in den Zielversionen von Windows nicht unterstützt werden. Um eine Anwendung zu kompilieren, die diese Funktionen verwendet, müssen Sie die entsprechenden Makros festlegen. Andernfalls erhalten Sie die Fehlermeldung C2065.
Die Windows-Headerdateien geben anhand von Makros an, welche Versionen von Windows viele Programmierelemente unterstützen. Daher müssen Sie diese Makros festlegen, um neue Funktionen zu verwenden, die in der jeweiligen Hauptversion des Betriebssystems eingeführt werden. (Einzelne Headerdateien verwenden möglicherweise abweichende Makros. Überprüfen Sie daher bei Kompilierungsproblemen die Headerdatei, die die Definition für bedingte Definitionen enthält.) 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.
Mindestsystemanforderungen | 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) |
Windows Server 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 in den Windows-Headerdateien verwendete Makros beschrieben.
Mindestsystemanforderungen | 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) |
Windows Server 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) |
Mindestens erforderliche Version | 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 mithilfe der #define-Anweisung in der jeweiligen Quelldatei oder durch Angeben der von Visual C++ unterstützten /D-Compileroption festlegen.
Legen Sie beispielsweise WINVER in Ihrer Quelldatei anhand folgender Anweisung fest:
#define WINVER 0x0502
Legen Sie _WIN32_WINNT in der Quelldatei anhand folgender Anweisung fest:
#define _WIN32_WINNT 0x0502
Verwenden Sie den folgenden Befehl, um _WIN32_WINNT mithilfe der /D-Compileroption festzulegen:
cl -c /D_WIN32_WINNT=0x0502 Quelle.cpp
Informationen zur Verwendung der /D-Compileroption finden Sie unter /D (Präprozessordefinitionen).
Einige Funktionen, die in der neuesten Version von Windows eingeführt wurden, können einem Service Pack einer früheren Version von Windows hinzugefügt werden. Daher müssen Sie möglicherweise bei einem bestimmten Service Pack _WIN32_WINNT anhand des Werts 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 mindestens 0x0502 entspricht. Diese Funktion wurde auch Windows XP mit SP1 hinzugefügt. Wenn Sie also _WIN32_WINNT als 0x0501 für Windows XP festlegen würden, würden die in Windows XP mit SP1 festgelegten Funktionen fehlen.
Steuern des Packens von Strukturen
Projekte müssen so kompiliert werden, dass das standardmäßige Packen von Strukturen verwendet wird. Dies entspricht derzeit 8 Bytes, da der größte Ganzzahltyp 8 Bytes beträgt. Dadurch wird sichergestellt, dass alle Strukturtypen innerhalb der Headerdateien in der Anwendung mit der gleichen, von der Windows-API vorgeschriebenen Ausrichtung kompiliert werden. Zudem wird hierdurch 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 (Ausrichten des Strukturmembers) oder Packen.
Schnellere Builds mit kleineren Headerdateien
Sie können die Größe der Windows-Headerdateien verringern, indem Sie einige der weniger gängigen 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 ein NOapi-Symbol, um die API auszuschließen. Beispielsweise schließt NOCOMM die API für die serielle Kommunikation aus. Eine Liste der NOapi-Symbole zur Unterstützung finden Sie unter „Windows.h“.
#define NOCOMM
Zugehörige Themen