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. Ils 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 à la fois des versions 32 et 64 bits de votre application à partir d’une base de code source unique. Pour plus d’informations, consultez Getting Ready for 64 bits Windows. 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 actuels au moment où Visual C++ a été publié. Par conséquent, si vous installez des fichiers d’en-tête mis à jour à partir d’un Kit de développement logiciel (SDK), vous pouvez avoir plusieurs versions des fichiers d’en-tête Windows sur votre ordinateur. Si vous ne vérifiez pas que vous utilisez la dernière version des fichiers d’en-tête du Kit de développement logiciel (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 du 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 de nouvelles fonctionnalités introduites dans chaque version majeure du système d’exploitation. (Les fichiers d’en-tête individuels peuvent utiliser différentes macros ; par conséquent, si des problèmes de compilation se produisent, vérifiez 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 d’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 de _WIN32_WINNT

Vous pouvez définir ces symboles à l’aide de l’instruction #define dans chaque fichier source ou en spécifiant l’option du 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 du 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 antérieure 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 deviez définir _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 la compression de structure

Les projets doivent être compilés pour utiliser la compression 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 provoquent 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 déclarations d’API moins courantes comme suit :

  • Définissez WIN32_LEAN_AND_MEAN pour exclure des API telles que le chiffrement, DDE, RPC, Shell et les sockets Windows.

    #define WIN32_LEAN_AND_MEAN

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

    #define NOCOMM

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