Использование заголовков Windows

Файлы заголовков для API Windows позволяют создавать 32- и 64-разрядные приложения. Они включают объявления для версий API в Юникоде и ANSI. Дополнительные сведения см. в разделе Юникод в API Windows. Они используют типы данных , позволяющие создавать 32- и 64-разрядные версии приложения из одной базы исходного кода. Дополнительные сведения см. в статье Подготовка к работе с 64-разрядной версией Windows. Дополнительные функции включают заметки заголовков и СТРОГУЮ проверку типов.

Visual C++ и файлы заголовков Windows

Microsoft Visual C++ включает копии файлов заголовков Windows, которые были актуальны на момент выпуска Visual C++. Таким образом, при установке обновленных файлов заголовков из пакета SDK на компьютере может быть несколько версий файлов заголовков Windows. Если вы не убедитесь, что используете последнюю версию файлов заголовков пакета SDK, при компиляции кода, использующего функции, появившиеся после выпуска Visual C++, вы получите следующий код ошибки: ошибка C2065: необъявленный идентификатор.

Макросы для условных объявлений

Некоторые функции, зависящие от конкретной версии Windows, объявляются с помощью условного кода. Это позволяет использовать компилятор, чтобы определить, использует ли приложение функции, которые не поддерживаются в его целевых версиях Windows. Чтобы скомпилировать приложение, использующее эти функции, необходимо определить соответствующие макросы. В противном случае появится сообщение об ошибке C2065.

Файлы заголовков Windows используют макросы, чтобы указать, какие версии Windows поддерживают множество элементов программирования. Поэтому необходимо определить эти макросы, чтобы использовать новые функции, представленные в каждом выпуске основной операционной системы. (Отдельные файлы заголовков могут использовать разные макросы. Поэтому при возникновении проблем с компиляцией проверка файл заголовка, содержащий определение для условных определений.) Дополнительные сведения см. в разделе SdkDdkVer.h.

В следующей таблице описаны предпочтительные макросы, используемые в файлах заголовков Windows. Если вы определяете NTDDI_VERSION, необходимо также определить _WIN32_WINNT.

Минимальная требуемая система Значение для NTDDI_VERSION
Windows 10 1903 "19H1" NTDDI_WIN10_19H1 (0x0A000007)
Windows 10 1809 "Редстоун 5" NTDDI_WIN10_RS5 (0x0A000006)
Windows 10 1803 "Редстоун 4" NTDDI_WIN10_RS4 (0x0A000005)
Windows 10 1709 "Редстоун 3" NTDDI_WIN10_RS3 (0x0A000004)
Windows 10 1703 "Редстоун 2" NTDDI_WIN10_RS2 (0x0A000003)
Windows 10 1607 "Редстоун 1" NTDDI_WIN10_RS1 (0x0A000002)
Windows 10 1511 "Пороговое значение 2" NTDDI_WIN10_TH2 (0x0A000001)
Windows 10 1507 "Пороговое значение" 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 с пакетом обновления 1 (SP1) NTDDI_VISTASP1 (0x06000100)
Windows Vista NTDDI_VISTA (0x06000000)
Windows Server 2003 с пакетом обновления 2 (SP2) NTDDI_WS03SP2 (0x05020200)
Windows Server 2003 с пакетом обновления 1 (SP1) NTDDI_WS03SP1 (0x05020100)
Windows Server 2003 NTDDI_WS03 (0x05020000)
Windows XP с пакетом обновления 3 (SP3) NTDDI_WINXPSP3 (0x05010300)
Windows XP с пакетом обновления 2 (SP2) NTDDI_WINXPSP2 (0x05010200)
Windows XP с пакетом обновления 1 (SP1) NTDDI_WINXPSP1 (0x05010100)
Windows XP NTDDI_WINXP (0x05010000)

 

В следующих таблицах описаны другие макросы, используемые в файлах заголовков Windows.

Минимальная требуемая система Минимальное значение для _WIN32_WINNT и 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 с пакетом обновления 1 (SP1), Windows XP с пакетом обновления 2 (SP2) _WIN32_WINNT_WS03 (0x0502)
Windows Server 2003, Windows XP _WIN32_WINNT_WINXP (0x0501)

 

Минимальная требуемая версия Минимальное значение _WIN32_IE
Internet Обозреватель 11.0 _WIN32_IE_IE110 (0x0A00)
Internet Обозреватель 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 Обозреватель 6.0 с пакетом обновления 2 (SP2) _WIN32_IE_IE60SP2 (0x0603)
Internet Обозреватель 6.0 с пакетом обновления 1 (SP1) _WIN32_IE_IE60SP1 (0x0601)
Internet Explorer 6.0 _WIN32_IE_IE60 (0x0600)
Internet Explorer 5,5 _WIN32_IE_IE55 (0x0550)
Internet Обозреватель 5.01 _WIN32_IE_IE501 (0x0501)
Internet Обозреватель 5.0, 5.0a, 5.0b _WIN32_IE_IE50 (0x0500)

 

Настройка WINVER или _WIN32_WINNT

Эти символы можно определить с помощью оператора #define в каждом исходном файле или с помощью параметра компилятора /D, поддерживаемого Visual C++.

Например, чтобы задать WINVER в исходном файле, используйте следующую инструкцию:

#define WINVER 0x0502

Чтобы задать _WIN32_WINNT в исходном файле, используйте следующую инструкцию:

#define _WIN32_WINNT 0x0502

Чтобы задать _WIN32_WINNT с помощью параметра компилятора /D, используйте следующую команду:

cl -c /D_WIN32_WINNT=0x0502source.cpp

Сведения об использовании параметра компилятора /D см. в разделе /D (определения препроцессора).

Обратите внимание, что некоторые функции, представленные в последней версии Windows, могут быть добавлены в пакет обновления для предыдущей версии Windows. Поэтому для установки пакета обновления может потребоваться определить _WIN32_WINNT со значением для следующего основного выпуска операционной системы. Например, функция GetDllDirectory появилась в Windows Server 2003 и определяется условно, если _WIN32_WINNT 0x0502 или выше. Эта функция также была добавлена в Windows XP с пакетом обновления 1 (SP1). Таким образом, если бы вы определили _WIN32_WINNT как 0x0501 для Windows XP, вы пропустите функции, определенные в Windows XP с пакетом обновления 1 (SP1).

Управление упаковкой структуры

Проекты должны компилироваться для использования упаковки структуры по умолчанию, которая в настоящее время составляет 8 байт, так как наибольший целочисленный тип составляет 8 байт. Это гарантирует, что все типы структуры в файлах заголовков будут скомпилированы в приложение с тем же выравниванием, что и API Windows. Это также гарантирует правильное выравнивание структур с 8-байтными значениями и не приведет к сбоям выравнивания на процессорах, которые обеспечивают выравнивание данных.

Дополнительные сведения см. в разделе /Zp (выравнивание элементов структуры) или pack.

Более быстрые сборки с файлами заголовков меньшего размера

Вы можете уменьшить размер файлов заголовков Windows, исключив некоторые из менее распространенных объявлений API следующим образом:

  • Определите WIN32_LEAN_AND_MEAN для исключения таких API, как шифрование, DDE, RPC, оболочка и сокеты Windows.

    #define WIN32_LEAN_AND_MEAN

  • Определите один или несколько символовAPI NO, чтобы исключить API. Например, NOCOMM исключает API последовательной связи. Список символовAPI NO поддержки см. в разделе Windows.h.

    #define NOCOMM

Сайт загрузки Windows SDK