Mettre à jour WINVER et _WIN32_WINNT

Lorsque vous utilisez le Kit de développement logiciel (SDK) Windows, vous pouvez spécifier les versions de Windows sur lesquelles votre code peut s’exécuter. Les macros de préprocesseur WINVER et _WIN32_WINNT spécifier la version minimale du système d’exploitation prise en charge par votre code. Visual Studio et le compilateur Microsoft C++ prennent en charge le ciblage de Windows 7 SP1 et versions ultérieures. Les ensembles d’outils plus anciens incluent la prise en charge de Windows XP SP2, Windows Server 2003 SP1, Vista et Windows Server 2008. Windows 95, Windows 98, Windows ME, Windows NT et Windows 2000 ne sont pas pris en charge.

Lorsque vous mettez à niveau un projet plus ancien, vous devrez peut-être mettre à jour vos macros WINVER ou _WIN32_WINNT . S’ils sont attribués des valeurs pour une version non prise en charge de Windows, vous pouvez voir des erreurs de compilation liées à ces macros.

Notes

Pour modifier les macros, dans un fichier d’en-tête (par exemple, dans targetver.h, qui est inclus par certains modèles de projet qui ciblent Windows), ajoutez les lignes suivantes.

#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00

Les macros de l’exemple sont définies pour cibler chaque version du système d’exploitation Windows 10. Les valeurs possibles sont répertoriées dans le fichier d’en-tête Windows sdkddkver.h, qui définit des macros pour chaque version principale de Windows. Pour créer votre application pour prendre en charge une plateforme Windows précédente, incluez WinSDKVer.h. Ensuite, définissez les macros WINVER et _WIN32_WINNT sur la plateforme prise en charge la plus ancienne avant d’inclure sdkddkver.h. Voici les lignes de la version du Kit de développement logiciel (SDK) Windows 10 du sdkddkver.h qui encodent les valeurs pour chaque version majeure de Windows :

//
// _WIN32_WINNT version constants
//
#define _WIN32_WINNT_NT4                    0x0400 // Windows NT 4.0
#define _WIN32_WINNT_WIN2K                  0x0500 // Windows 2000
#define _WIN32_WINNT_WINXP                  0x0501 // Windows XP
#define _WIN32_WINNT_WS03                   0x0502 // Windows Server 2003
#define _WIN32_WINNT_WIN6                   0x0600 // Windows Vista
#define _WIN32_WINNT_VISTA                  0x0600 // Windows Vista
#define _WIN32_WINNT_WS08                   0x0600 // Windows Server 2008
#define _WIN32_WINNT_LONGHORN               0x0600 // Windows Vista
#define _WIN32_WINNT_WIN7                   0x0601 // Windows 7
#define _WIN32_WINNT_WIN8                   0x0602 // Windows 8
#define _WIN32_WINNT_WINBLUE                0x0603 // Windows 8.1
#define _WIN32_WINNT_WINTHRESHOLD           0x0A00 // Windows 10
#define _WIN32_WINNT_WIN10                  0x0A00 // Windows 10
// . . .

Pour une approche plus fine du contrôle de version, vous pouvez utiliser les constantes de version NTDDI dans sdkddkver.h. Voici quelques-unes des macros définies par sdkddkver.h dans windows 10 SDK version 10.0.18362.0 :

//
// NTDDI version constants
//
#define NTDDI_WIN7                          0x06010000
#define NTDDI_WIN8                          0x06020000
#define NTDDI_WINBLUE                       0x06030000
#define NTDDI_WINTHRESHOLD                  0x0A000000  /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10                         0x0A000000  /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10_TH2                     0x0A000001  /* ABRACADABRA_WIN10_TH2 */
#define NTDDI_WIN10_RS1                     0x0A000002  /* ABRACADABRA_WIN10_RS1 */
#define NTDDI_WIN10_RS2                     0x0A000003  /* ABRACADABRA_WIN10_RS2 */
#define NTDDI_WIN10_RS3                     0x0A000004  /* ABRACADABRA_WIN10_RS3 */
#define NTDDI_WIN10_RS4                     0x0A000005  /* ABRACADABRA_WIN10_RS4 */
#define NTDDI_WIN10_RS5                     0x0A000006  /* ABRACADABRA_WIN10_RS5 */
#define NTDDI_WIN10_19H1                    0x0A000007  /* ABRACADABRA_WIN10_19H1*/

#define WDK_NTDDI_VERSION                   NTDDI_WIN10_19H1 /* ABRACADABRA_WIN10_19H1 */

//
// masks for version macros
//
#define OSVERSION_MASK      0xFFFF0000
#define SPVERSION_MASK      0x0000FF00
#define SUBVERSION_MASK     0x000000FF

//
// macros to extract various version fields from the NTDDI version
//
#define OSVER(Version)  ((Version) & OSVERSION_MASK)
#define SPVER(Version)  (((Version) & SPVERSION_MASK) >> 8)
#define SUBVER(Version) (((Version) & SUBVERSION_MASK) )

Les macros OSVER, SPVER et SUBVER peuvent être utilisées dans votre code pour contrôler la compilation conditionnelle pour différents niveaux de prise en charge des API.

Vous ne voyez peut-être pas toutes ces versions de Windows répertoriées dans le sdkddkver.h que vous examinez. Cela signifie que vous utilisez probablement une version antérieure du Kit de développement logiciel (SDK) Windows. (Si vous voyez plus d’informations, vous examinez probablement une version plus récente du Kit de développement logiciel (SDK).) Par défaut, les nouveaux projets Windows dans Visual Studio utilisent le dernier Kit de développement logiciel (SDK) Windows fourni avec Visual Studio. Pour utiliser un sdk plus récent que vous avez installé séparément, vous devez définir le SDK Windows explicitement dans les propriétés de votre projet.

Remarque

Il n'est pas certain que les valeurs fonctionnent si vous incluez des en-têtes MFC internes dans votre application.

Vous pouvez également définir cette macro à l'aide de l'option de compilateur /D. Pour plus d'informations, consultez /D (Preprocessor Definitions).

Pour plus d’informations sur les significations de ces macros, consultez Utilisation des en-têtes Windows.

Voir aussi

Historique des modifications de Visual C++