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.