Utilisation des en-têtes Windows
Les fichiers d’en-tête pour l’API Windows vous permettent de créer des applications 32 bits et 64 bits. Ils incluent des déclarations pour les versions Unicode et ANSI de l’API. Pour plus d’informations, veuillez consulter la section Unicode dans l’API Windows. Ils utilisent des types de données qui vous permettent de créer des versions 32 bits et 64 bits de votre application à partir d’une seule base de code source. Pour plus d’informations, veuillez consulter la section Préparation pour Windows 64 bits. Les fonctionnalités supplémentaires incluent les Annotations d’en-tête et la Vérification des types STRICT.
- Visual C++ et les fichiers d’en-tête Windows
- Macros pour les déclarations conditionnelles
- Définition de WINVER ou de _WIN32_WINNT
- Contrôle de l’alignement de structure
- Builds plus rapides avec des fichiers d’en-tête plus petits
- Rubriques connexes
Visual C++ et les fichiers d’en-tête Windows
Microsoft Visual C++ inclut des copies des fichiers d’en-tête Windows qui étaient actuels au moment de la sortie de Visual C++. Par conséquent, si vous installez des fichiers d’en-tête mis à jour à partir d’un SDK, vous risquez de vous retrouver avec plusieurs versions des fichiers d’en-tête Windows sur votre ordinateur. Si vous ne vous assurez pas que vous utilisez la dernière version des fichiers d’en-tête du SDK, vous recevrez le code d’erreur suivant lors de la compilation de code utilisant des fonctionnalités introduites après la sortie de Visual C++ : erreur C2065 :
Macros pour les déclarations conditionnelles
Certaines fonctions qui dépendent d’une version particulière de Windows sont déclarées à l’aide de code conditionnel. Cela vous permet d’utiliser le compilateur pour détecter si votre application utilise des fonctions qui ne sont pas prises en charge sur la ou les versions cibles de Windows. Pour compiler une application utilisant ces fonctions, vous devez définir les macros appropriées. Sinon, vous recevrez le message d’erreur C2065.
Les fichiers d’en-tête Windows utilisent des macros pour indiquer quelles versions de Windows prennent en charge de nombreux éléments de programmation. Par conséquent, vous devez définir ces macros pour utiliser les nouvelles fonctionnalités introduites dans chaque nouvelle version majeure du système d’exploitation. (Les fichiers d’en-tête individuels peuvent utiliser des macros différentes ; par conséquent, en cas de problèmes de compilation, vérifiez le fichier d’en-tête contenant la définition des définitions conditionnelles.) Pour plus d’informations, consultez SdkDdkVer.h.
Le tableau suivant décrit les macros préférées utilisées dans les fichiers d’en-tête Windows. Si vous définissez NTDDI_VERSION, vous devez également définir _WIN32_WINNT.
Système minimum requis | Valeur pour 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 « Threshold 2 » | NTDDI_WIN10_TH2 (0x0A000001) |
Windows 10 1507 « Threshold 2 » | 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 Service Pack 1 (SP1) | NTDDI_VISTASP1 (0x06000100) |
Windows Vista | NTDDI_VISTA (0x06000000) |
Windows Server 2003 avec Service Pack 2 (SP2) | NTDDI_WS03SP2 (0x05020200) |
Windows Server 2003 avec Service Pack 1 (SP1) | NTDDI_WS03SP1 (0x05020100) |
Windows Server 2003 | NTDDI_WS03 (0x05020000) |
Windows XP avec Service Pack 3 (SP3) | NTDDI_WINXPSP3 (0x05010300) |
Windows XP avec Service Pack 2 (SP2) | NTDDI_WINXPSP2 (0x05010200) |
Windows XP avec Service Pack 1 (SP1) | NTDDI_WINXPSP1 (0x05010100) |
Windows XP | NTDDI_WINXP (0x05010000) |
Les tableaux suivants décrivent d’autres macros utilisées dans les fichiers d’en-tête Windows.
Système minimum requis | Valeur minimum pour _WIN32_WINNT et 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 avec SP1, Windows XP avec SP2 | _WIN32_WINNT_WS03 (0x0502) |
Windows Server 2003, Windows XP | _WIN32_WINNT_WINXP (0x0501) |
Version minimale requise | Valeur minimum de _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) |
Définition de WINVER ou de _WIN32_WINNT
Vous pouvez définir ces symboles en utilisant l’instruction #define dans chaque fichier source, ou en spécifiant l’option de compilation /D supportée par Visual C++.
Par exemple, pour définir WINVER dans votre fichier source, utilisez l’instruction suivante :
#define WINVER 0x0502
Pour définir _WIN32_WINNT dans votre fichier source, utilisez l’instruction suivante :
#define _WIN32_WINNT 0x0502
Pour définir _WIN32_WINNT en utilisant l’option de compilation /D, utilisez la commande suivante :
cl -c /D_WIN32_WINNT=0x0502 source.cpp
Pour des informations sur l’utilisation de l’option de compilation /D, veuillez consulter la section /D (définitions du préprocesseur).
Notez que certaines fonctionnalités introduites dans la dernière version de Windows peuvent être ajoutées à un service pack d’une version précédente de Windows. Par conséquent, pour cibler un service pack, vous devrez peut-être définir _WIN32_WINNT avec la valeur de la prochaine version majeure du système d’exploitation. Par exemple, la fonction GetDllDirectory a été introduite dans Windows Server 2003 et est définie de manière conditionnelle si _WIN32_WINNT est 0x0502 ou supérieur. Cette fonction a également été ajoutée à Windows XP avec SP1. Par conséquent, si vous définissiez _WIN32_WINNT à 0x0501 pour cibler Windows XP, vous manqueriez des fonctionnalités définies dans Windows XP avec SP1.
Contrôle de l’alignement de structure
Les projets doivent être compilés en utilisant le regroupement par défaut des structures, qui est actuellement de 8 octets car le type intégral le plus grand est de 8 octets. Cela garantit que tous les types de structures dans les fichiers d’en-tête sont compilés dans l’application avec le même alignement attendu par l’API Windows. Cela garantit également que les structures avec des valeurs de 8 octets sont correctement alignées et ne provoqueront pas de fautes d’alignement sur les processeurs qui appliquent l’alignement des données.
Pour plus d’informations, veuillez consulter la section /Zp (alignement des membres de la structure) ou pack.
Builds plus rapides avec des fichiers d’en-tête plus petits
Vous pouvez réduire la taille des fichiers d’en-tête Windows en excluant certaines des déclarations d’API les moins courantes comme suit :
Définissez WIN32_LEAN_AND_MEAN pour exclure les API telles que Cryptographie, DDE, RPC, Shell et Windows Sockets.
#define WIN32_LEAN_AND_MEAN
Définissez une ou plusieurs des symboles NOapi pour exclure l’API. Par exemple, NOCOMM exclut l’API de communication série. Pour une liste des symboles NOapi pris en charge, consultez Windows.h.
#define NOCOMM
Rubriques connexes