Usar los encabezados de Windows

Los archivos de encabezado de la API de Windows permiten crear aplicaciones de 32 y 64 bits. Incluyen declaraciones para las versiones Unicode y ANSI de la API. Para obtener más información, consulte Unicode en la API de Windows. Usan tipos de datos que permiten compilar versiones de 32 y 64 bits de la aplicación a partir de una única base de código fuente. Para obtener más información, consulte Getting Ready for 64-bit Windows (Preparación para Windows de 64 bits). Entre las características adicionales se incluyen las anotaciones de encabezado y la comprobación de tipos STRICT.

Visual C++ y los archivos de encabezado de Windows

Microsoft Visual C++ incluye copias de los archivos de encabezado de Windows que estaban actualizados en el momento en que se publicó Visual C++. Por lo tanto, si instala archivos de encabezado actualizados desde un SDK, es posible que termine con varias versiones de los archivos de encabezado de Windows en el equipo. Si no se asegura de que está usando la versión más reciente de los archivos de encabezado del SDK, recibirá el siguiente código de error al compilar código que usa características introducidas después de que se publicó Visual C++: error C2065: identificador no declarado.

Macros para declaraciones condicionales

Ciertas funciones que dependen de una versión determinada de Windows se declaran mediante código condicional. Esto le permite usar el compilador para detectar si la aplicación usa funciones que no se admiten en sus versiones de destino de Windows. Para compilar una aplicación que use estas funciones, debe definir las macros adecuadas. De lo contrario, recibirá el mensaje de error C2065.

Los archivos de encabezado de Windows usan macros para indicar qué versiones de Windows admiten muchos elementos de programación. Por lo tanto, debe definir estas macros para usar la nueva funcionalidad introducida en cada versión principal del sistema operativo. (Los archivos de encabezado individuales pueden usar macros diferentes; por lo tanto, si se producen problemas de compilación, compruebe el archivo de encabezado que contiene la definición de las definiciones condicionales). Para obtener más información, vea SdkDdkVer.h.

En la tabla siguiente se describen las macros preferidas que se usan en los archivos de encabezado de Windows. Si define NTDDI_VERSION, también debe definir _WIN32_WINNT.

Sistema mínimo necesario Valor 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 "Umbral 2" NTDDI_WIN10_TH2 (0x0A000001)
Windows 10 1507 "Umbral" 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 con Service Pack 1 (SP1) NTDDI_VISTASP1 (0x06000100)
Windows Vista NTDDI_VISTA (0x06000000)
Windows Server 2003 con Service Pack 2 (SP2) NTDDI_WS03SP2 (0x05020200)
Windows Server 2003 con Service Pack 1 (SP1) NTDDI_WS03SP1 (0x05020100)
Windows Server 2003 NTDDI_WS03 (0x05020000)
Windows XP con Service Pack 3 (SP3) NTDDI_WINXPSP3 (0x05010300)
Windows XP con Service Pack 2 (SP2) NTDDI_WINXPSP2 (0x05010200)
Windows XP con Service Pack 1 (SP1) NTDDI_WINXPSP1 (0x05010100)
Windows XP NTDDI_WINXP (0x05010000)

 

En las tablas siguientes se describen otras macros usadas en los archivos de encabezado de Windows.

Sistema mínimo necesario Valor mínimo para _WIN32_WINNT y 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 con SP1, Windows XP con SP2 _WIN32_WINNT_WS03 (0x0502)
Windows Server 2003, Windows XP _WIN32_WINNT_WINXP (0x0501)

 

Versión mínima necesaria Valor mínimo 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)

 

Establecer WINVER o _WIN32_WINNT

Puede definir estos símbolos mediante la instrucción #define en cada archivo de origen o especificando la opción del compilador /D compatible con Visual C++.

Por ejemplo, para establecer WINVER en el archivo de origen, use la siguiente instrucción:

#define WINVER 0x0502

Para establecer _WIN32_WINNT en el archivo de origen, use la siguiente instrucción:

#define _WIN32_WINNT 0x0502

Para establecer _WIN32_WINNT mediante la opción del compilador /D, use el siguiente comando:

cl -c /D_WIN32_WINNT=0x0502source.cpp

Para obtener información sobre el uso de la opción del compilador /D, vea /D (definiciones de preprocesador).

Tenga en cuenta que algunas características introducidas en la versión más reciente de Windows se pueden agregar a un Service Pack para una versión anterior de Windows. Por lo tanto, para dirigirse a un Service Pack, es posible que tenga que definir _WIN32_WINNT con el valor de la siguiente versión principal del sistema operativo. Por ejemplo, la función GetDllDirectory se introdujo en Windows Server 2003 y se define condicionalmente si _WIN32_WINNT es 0x0502 o superior. Esta función también se agregó a Windows XP con SP1. Por lo tanto, si tuvieras que definir _WIN32_WINNT como 0x0501 para dirigirse a Windows XP, perderías características definidas en Windows XP con SP1.

Control del empaquetado de la estructura

Los proyectos deben compilarse para usar el empaquetado de estructura predeterminado, que actualmente es de 8 bytes porque el tipo entero más grande es de 8 bytes. Esto garantiza que todos los tipos de estructura de los archivos de encabezado se compilen en la aplicación con la misma alineación que espera la API de Windows. También garantiza que las estructuras con valores de 8 bytes estén correctamente alineadas y no provocarán errores de alineación en los procesadores que aplican la alineación de los datos.

Para obtener más información, vea /Zp (alineación de miembros de estructura) o pack.

Compilaciones más rápidas con archivos de encabezado más pequeños

Puede reducir el tamaño de los archivos de encabezado de Windows excluyendo algunas de las declaraciones de API menos comunes de la siguiente manera:

  • Defina WIN32_LEAN_AND_MEAN para excluir las API, como Criptografía, DDE, RPC, Shell y Windows Sockets.

    #define WIN32_LEAN_AND_MEAN

  • Defina uno o varios de los símbolos deAPI NO para excluir la API. Por ejemplo, NOCOMM excluye la API de comunicación serie. Para obtener una lista de símbolos deAPI no compatibles, consulte Windows.h.

    #define NOCOMM

Sitio de descarga de Windows SDK