Utilisation des en-têtes Windows

Les fichiers d’en-tête de l’API Windows vous permettent de créer des applications 32 et 64 bits. Elles incluent des déclarations pour les versions Unicode et ANSI de l’API. Pour plus d’informations, consultez Unicode dans l’API Windows. Ils utilisent des types de données qui vous permettent de générer des versions 32 et 64 bits de votre application à partir d’une seule base de code source. Pour plus d’informations, consultez Préparation pour Windows 64 bits. Les fonctionnalités supplémentaires incluent les annotations d’en-tête et la vérification de type STRICT.

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 à jour au moment de la publication de Visual C++. Par conséquent, si vous installez les fichiers d’en-tête mis à jour à partir d’un SDK, vous pouvez 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 du code qui utilise des fonctionnalités introduites après la publication de Visual C++ : erreur C2065 : identificateur non déclaré.

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 sa ou ses versions cibles de Windows. Pour compiler une application qui utilise 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 version majeure du système d’exploitation. (Les fichiers d’en-tête individuels peuvent utiliser des macros différentes ; par conséquent, si des problèmes de compilation se produisent, case activée le fichier d’en-tête qui contient 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 minimal requis Valeur de 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 « Seuil 2 » NTDDI_WIN10_TH2 (0x0A000001)
Windows 10 1507 « Seuil » 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 les autres macros utilisées dans les fichiers d’en-tête Windows.

Système minimal requis Valeur minimale 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 nécessaire Valeur minimale 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 _WIN32_WINNT

Vous pouvez définir ces symboles à l’aide de l’instruction #define dans chaque fichier source ou en spécifiant l’option de compilateur /D prise en charge 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 à l’aide de l’option de compilateur /D, utilisez la commande suivante :

cl -c /D_WIN32_WINNT=0x0502source.cpp

Pour plus d’informations sur l’utilisation de l’option du compilateur /D, consultez /D (définitions de préprocesseur).

Notez que certaines fonctionnalités introduites dans la dernière version de Windows peuvent être ajoutées à un Service Pack pour 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éfinissez _WIN32_WINNT comme 0x0501 pour cibler Windows XP, vous ne pouvez pas utiliser les fonctionnalités définies dans Windows XP avec SP1.

Contrôle de l’empaquetage de structure

Les projets doivent être compilés pour utiliser l’empaquetage de structure par défaut, qui est actuellement de 8 octets, car le plus grand type intégral est de 8 octets. Cela garantit que tous les types de structure dans les fichiers d’en-tête sont compilés dans l’application avec le même alignement attendu par l’API Windows. Il garantit également que les structures avec des valeurs de 8 octets sont correctement alignées et ne provoqueront pas d’erreurs d’alignement sur les processeurs qui appliquent l’alignement des données.

Pour plus d’informations, consultez /Zp (alignement des membres de struct) 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 sockets Windows.

    #define WIN32_LEAN_AND_MEAN

  • Définissez un ou plusieurs symbolesd’API NO pour exclure l’API. Par exemple, NOCOMM exclut l’API de communication série. Pour obtenir la liste des symbolesd’API NO de prise en charge, consultez Windows.h.

    #define NOCOMM

Site de téléchargement du Kit de développement logiciel (SDK) Windows