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
- Macros para declaraciones condicionales
- Establecer WINVER o _WIN32_WINNT
- Control del empaquetado de la estructura
- Compilaciones más rápidas con archivos de encabezado más pequeños
- Temas relacionados
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
Temas relacionados
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de