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

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

Site de téléchargement du SDK Windows