Usando os cabeçalhos do Windows
Os arquivos de cabeçalho para a API do Windows permitem que você crie aplicativos de 32 e 64 bits. Eles incluem declarações para as versões Unicode e ANSI da API. Para obter mais informações, consulte Unicode node API do Windows. Eles usam tipos de dados que permitem criar versões de 32 e 64 bits do seu aplicativo a partir de uma única base de código-fonte. Para obter mais informações, consulte Preparar-se para o Windows de 64 bits. Os 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
- Configuração de WINVER ou _WIN32_WINNT
- Controle de Estrutura de Embalagem
- Compilações mais rápidas com ficheiros 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 estavam atualizados no momento em que o Visual C++ foi lançado. Portanto, se você instalar arquivos de cabeçalho atualizados de um SDK, você pode acabar com várias versões dos arquivos de cabeçalho do Windows no seu computador. Se você não garantir que você está usando a versão mais recente dos arquivos de cabeçalho do SDK, você 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 detetar se seu aplicativo usa funções que não são suportadas na(s) sua(s) versão(õ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 suportam 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 preferidas usadas nos arquivos de cabeçalho do Windows. Se você definir NTDDI_VERSION, você também deve definir _WIN32_WINNT.
Sistema mínimo necessário | 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 "Limiar 2" | NTDDI_WIN10_TH2 (0x0A000001) |
Windows 10 1507 "Limite" | 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 Pacote de Serviço 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.
Sistema mínimo necessário | 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 necessá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) |
Configuração de 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 de compilador /D suportada pelo 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 de compilador /D, use o seguinte comando:
cl -c /D_WIN32_WINNT=0x0502source.cpp
Para obter informações sobre como usar a opção de 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 de forma condicional se _WIN32_WINNT for 0x0502 ou superior. Esta 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 a compactação da estrutura
Os projetos devem ser compilados para usar o pacote de estrutura padrão, que atualmente é de 8 bytes porque o maior tipo de 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 esperado pela API do Windows. Ele também garante que as estruturas com valores de 8 bytes estejam alinhadas corretamente e não causará falhas de alinhamento nos processadores que impõem o alinhamento de dados.
Para obter mais informações, consulte /Zp (struct member alignment) 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 NOapi para excluir a API. Por exemplo, NOCOMM exclui a API de comunicação serial. Para obter uma lista dos símbolos de suporte NO de api, consulte Windows.h.
#define NOCOMM
Tópicos relacionados