Como usar os cabeçalhos do Windows
Os arquivos de cabeçalho da API do Windows permitem que você crie aplicativos de 32 e 64 bits. Eles incluem declarações para versões Unicode e ANSI da API. Para obter mais informações, consulte Unicode na API do Windows. Eles usam tipos de dados que permitem criar versões de 32 e 64 bits do aplicativo a partir de uma única base de código-fonte. Para obter mais informações, consulte Preparando-se para o Windows de 64 bits. Recursos adicionais incluem anotações de cabeçalho e verificação de tipo STRICT.
- Visual C++ e os arquivos de cabeçalho do Windows
- Macros para declarações condicionais
- Configurando WINVER ou _WIN32_WINNT
- Controlando o empacotamento da estrutura
- Compilações mais rápidas com arquivos de cabeçalho menores
- Tópicos relacionados
Visual C++ e os arquivos de cabeçalho do Windows
O Microsoft Visual C++ inclui cópias dos arquivos de cabeçalho do Windows que eram atuais no momento em que o Visual C++ foi lançado. Portanto, se você instalar arquivos de cabeçalho atualizados de um SDK, poderá acabar com várias versões dos arquivos de cabeçalho do Windows em seu computador. Se você não garantir que está usando a versão mais recente dos arquivos de cabeçalho do SDK, receberá o seguinte código de erro ao compilar o código que usa recursos que foram introduzidos após o lançamento do Visual C++: erro C2065: identificador não declarado.
Macros para declarações condicionais
Determinadas funções que dependem de uma versão específica do Windows são declaradas usando código condicional. Isso permite que você use o compilador para detectar se seu aplicativo usa funções que não têm suporte em suas versões de destino do Windows. Para compilar um aplicativo que usa essas funções, você deve definir as macros apropriadas. Caso contrário, você receberá a mensagem de erro C2065.
Os arquivos de cabeçalho do Windows usam macros para indicar quais versões do Windows dão suporte a muitos elementos de programação. Portanto, você deve definir essas macros para usar a nova funcionalidade introduzida em cada versão principal do sistema operacional. (Arquivos de cabeçalho individuais podem usar macros diferentes; portanto, se ocorrerem problemas de compilação, verifique o arquivo de cabeçalho que contém a definição para definições condicionais.) Para obter mais informações, consulte SdkDdkVer.h.
A tabela a seguir descreve as macros preferenciais usadas nos arquivos de cabeçalho do Windows. Se você definir NTDDI_VERSION, também deverá definir _WIN32_WINNT.
Requisitos mínimos do sistema | 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 com Service Pack 1 (SP1) | NTDDI_VISTASP1 (0x06000100) |
Windows Vista | NTDDI_VISTA (0x06000000) |
Windows Server 2003 com Service Pack 2 (SP2) | NTDDI_WS03SP2 (0x05020200) |
Windows Server 2003 com Service Pack 1 (SP1) | NTDDI_WS03SP1 (0x05020100) |
Windows Server 2003 | NTDDI_WS03 (0x05020000) |
Windows XP com Service Pack 3 (SP3) | NTDDI_WINXPSP3 (0x05010300) |
Windows XP com Service Pack 2 (SP2) | NTDDI_WINXPSP2 (0x05010200) |
Windows XP com Service Pack 1 (SP1) | NTDDI_WINXPSP1 (0x05010100) |
Windows XP | NTDDI_WINXP (0x05010000) |
As tabelas a seguir descrevem outras macros usadas nos arquivos de cabeçalho do Windows.
Requisitos mínimos do sistema | Valor mínimo para _WIN32_WINNT e 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 com SP1, Windows XP com SP2 | _WIN32_WINNT_WS03 (0x0502) |
Windows Server 2003, Windows XP | _WIN32_WINNT_WINXP (0x0501) |
Versão mínima obrigatória | 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) |
Configurando WINVER ou _WIN32_WINNT
Você pode definir esses símbolos usando a instrução #define em cada arquivo de origem ou especificando a opção do compilador /D com suporte do Visual C++.
Por exemplo, para definir WINVER em seu arquivo de origem, use a seguinte instrução:
#define WINVER 0x0502
Para definir _WIN32_WINNT no arquivo de origem, use a seguinte instrução:
#define _WIN32_WINNT 0x0502
Para definir _WIN32_WINNT usando a opção do compilador /D, use o seguinte comando:
cl -c /D_WIN32_WINNT=0x0502 source.cpp
Para obter informações sobre como usar a opção do compilador /D, consulte /D (definições de pré-processador).
Observe que alguns recursos introduzidos na versão mais recente do Windows podem ser adicionados a um service pack para uma versão anterior do Windows. Portanto, para direcionar um service pack, talvez seja necessário definir _WIN32_WINNT com o valor da próxima versão principal do sistema operacional. Por exemplo, a função GetDllDirectory foi introduzida no Windows Server 2003 e é definida condicionalmente se _WIN32_WINNT for 0x0502 ou superior. Essa função também foi adicionada ao Windows XP com SP1. Portanto, se você definisse _WIN32_WINNT como 0x0501 para direcionar o Windows XP, perderia os recursos definidos no Windows XP com SP1.
Controlando o empacotamento da estrutura
Os projetos devem ser compilados para usar o empacotamento de estrutura padrão, que atualmente é de 8 bytes porque o maior tipo integral é de 8 bytes. Isso garante que todos os tipos de estrutura dentro dos arquivos de cabeçalho sejam compilados no aplicativo com o mesmo alinhamento que a API do Windows espera. Ele também garante que as estruturas com valores de 8 bytes sejam alinhadas corretamente e não causem falhas de alinhamento nos processadores que impõem o alinhamento de dados.
Para obter mais informações, confira /Zp (alinhamento do membro da estrutura) ou pack.
Compilações mais rápidas com arquivos de cabeçalho menores
Você pode reduzir o tamanho dos arquivos de cabeçalho do Windows excluindo algumas das declarações de API menos comuns da seguinte maneira:
Defina WIN32_LEAN_AND_MEAN para excluir APIs como Criptografia, DDE, RPC, Shell e Windows Sockets.
#define WIN32_LEAN_AND_MEAN
Defina um ou mais dos símbolos de API NO para excluir a API. Por exemplo, NOCOMM exclui a API de comunicação serial. Para obter uma lista de símbolos de API NO de suporte, consulte Windows.h.
#define NOCOMM
Tópicos relacionados