Compartir a través de


Actualización de WINVER y _WIN32_WINNT

Al usar Windows SDK, se puede especificar en qué versiones de Windows se puede ejecutar el código. Las macros de preprocesador WINVER y _WIN32_WINNT especifican la versión de sistema operativo mínima que el código admite. Visual Studio y el compilador de Microsoft C++ admiten Windows 7 SP1 y versiones posteriores. Los conjuntos de herramientas anteriores incluyen compatibilidad con Windows XP SP2, con Windows Server 2003 SP1, con Vista y con Windows Server 2008. Windows 95, Windows 98, Windows ME, Windows NT y Windows 2000 no se admiten.

Al actualizar un proyecto anterior, es posible que haya que actualizar las macros winVER o _WIN32_WINNT. Si se les asignan valores de una versión de Windows no compatible, pueden aparecer errores de compilación relacionados con estas macros.

Comentarios

Para modificar las macros, agregue las líneas siguientes en un archivo de encabezado (por ejemplo, en targetver.h, que se incluye en algunas plantillas de proyecto que tienen como destino Windows).

#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00

Las macros del ejemplo están configuradas para tener como destino cada versión del sistema operativo Windows 10. Los valores posibles se muestran en el archivo de encabezado de Windows sdkddkver.h, que define las macros de cada versión de Windows principal. Para crear la aplicación de forma que admita una plataforma Windows anterior, incluya WinSDKVer.h. Luego, establezca las macros WINVER y _WIN32_WINNT en la plataforma admitida más antigua antes de incluir sdkddkver.h. Aquí se muestran las líneas de la versión de SDK de Windows 10 de sdkddkver.h que codifican los valores de cada versión principal 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
// . . .

Para obtener un enfoque más específico del control de versiones, puede usar las constantes de versión NTDDI en sdkddkver.h. Estas son algunas de las macros definidas por sdkddkver.h en la versión 10.0.18362.0 del SDK de Windows 10:

//
// 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) )

Las macros OSVER, SPVER y SUBVER se pueden usar en el código para controlar la compilación condicional de los diferentes niveles de compatibilidad con la API.

Es posible que no se muestren todas estas versiones de Windows enumeradas en el archivo sdkddkver.h que está examinando. Esto significa que probablemente está usando una versión anterior de Windows SDK (si ve más, probablemente esté examinando una versión más reciente del SDK). De forma predeterminada, los proyectos de Windows nuevos en Visual Studio usan la versión más reciente de Windows SDK que se incluye con Visual Studio. Para usar un SDK más reciente que haya instalado por separado, tendrá que establecer el Windows SDK explícitamente en las propiedades del proyecto.

Nota:

No se garantiza que los valores funcionen si incluye encabezados de MFC internos en la aplicación.

También puede definir esta macro mediante la opción del compilador /D. Para obtener más información, vea /D (Preprocessor Definitions).

Para obtener más información sobre el significado de estas macros, consulte Uso de los encabezados de Windows.

Consulte también

Historial de cambios en Visual C++