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

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

Windows SDK-Downloadwebsite