Uso de los encabezados de Windows

Los archivos de título 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 Windows API. Usan tipos de datos que le permiten crear versiones de 32 y 64 bits de su aplicación a partir de una única base de código fuente. Para obtener más información, consulte Prepararse para 64-bit Windows. Características adicionales incluyen anotaciones de títulos y STRICT Tipo de comprobación.

Visual C++ y los archivos de cabecera de Windows

Microsoft Visual C++ incluye copias de los archivos de título de Windows que estaban actualizados en el momento en que se publicó Visual C++. Por lo tanto, si instala archivos de título actualizados desde un SDK, puede acabar teniendo varias versiones de los archivos de título de Windows en su ordenador. Si no se asegura de estar utilizando la última versión de los archivos de cabecera del SDK, recibirá el siguiente código de error al compilar código que utilice funciones introducidas después del lanzamiento de Visual C++: error C2065: undeclared identifier.

Macros para declaraciones condicionales

Algunas funciones que dependen de una versión concreta de Windows se declaran mediante código condicional. This le permite utilizar el compilador para detectar si su aplicación utiliza funciones que no son compatibles con su(s) versión(es) de destino de Windows. Para compilar una aplicación que utilice estas funciones, debe definir las macros adecuadas. De lo contrario, recibirá el mensaje de error C2065.

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

La siguiente tabla describe las macros preferidas utilizadas en los archivos de cabecera de Windows. Si define NTDDI_VERSION, también debe definir _WIN32_WINNT.

Sistema mínimo requerido Valor para 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" 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)

 

La siguientes tablas describen otras macros preferidas utilizadas en los archivos de cabecera de Windows.

Sistema mínimo requerido Valor mínimo para _WIN32_WINNT and 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 requerida 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)

 

Instalar WINVER o _WIN32_WINNT

Puede definir estos símbolos utilizando la sentencia #define en cada fichero fuente, o especificando la opción de compilador /D soportada por Visual C++.

Por ejemplo, para establecer WINVER en su fichero fuente, utilice la siguiente sentencia:

#define WINVER 0x0502

Para establecer _WIN32_WINNT en su fichero fuente, utilice la siguiente sentencia:

#define _WIN32_WINNT 0x0502

Para establecer _WIN32_WINNT utilizando la opción de compilador /D, utilice el siguiente comando:

cl -c /D_WIN32_WINNT=0x0502 fuente.cpp

Para obtener información sobre el uso de la opción de compilador /D, consulte /D (definiciones de preprocesadores).

Tenga en cuenta que algunas funciones introducidas en la última versión de Windows pueden añadirse a un Service Pack para una versión anterior de Windows. Por lo tanto, para apuntar 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, el GetDllDirectory función se introdujo en Windows Server 2003 y se define condicionalmente si _WIN32_WINNT es 0x0502 o mayor. Esta función también se añadió a Windows XP con el SP1. Por lo tanto, si definiera _WIN32_WINNT como 0x0501 para Windows XP, se perdería funciones definidas en Windows XP con SP1.

Estructura de control Embalaje

Los proyectos deben compilarse para utilizar el empaquetado de estructuras por defecto, que actualmente es de 8 bytes porque el tipo integral más grande es de 8 bytes. De este modo se garantiza que todos los tipos de estructura de los archivos de cabecera 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 provoquen fallos de alineación en procesadores que impongan la alineación de datos.

Para más información, consulte /Zp (alineación de miembros estructurales) o paquete.

Compilación más rápida con archivos de cabecera más pequeños

Puede reducir el tamaño de los archivos de título de Windows excluyendo algunas de las declaraciones de API menos comunes, como se indica a continuación:

  • Defina WIN32_LEAN_AND_MEAN para excluir APIs como Cryptography, DDE, RPC, Shell y Windows Sockets.

    #define WIN32_LEAN_AND_MEAN

  • Defina uno o más de NOapi símbolos para excluir al API. Por ejemplo, NOCOMM excluye la API de comunicación serie. Para una lista de soporte NOapi símbolos, consulte Windows.h.

    #define NOCOMM

Windows SDK descargar sitio