Файлы заголовков для API Windows позволяют создавать 32-разрядные и 64-разрядные приложения. Они включают объявления для версий API Юникода и ANSI. Дополнительные сведения см . в Юникоде в API Windows. Они используют типы данных, позволяющие создавать 32-разрядные и 64-разрядные версии приложения из одной базы исходного кода. Дополнительные сведения см. в статье "Подготовка к работе с 64-разрядной версией Windows". К дополнительным функциям относятся заметки заголовков и проверка типов STRICT.
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 "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 "Порог 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 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 с пакетом обновления 2 (SP2)
_WIN32_IE_IE60SP2 (0x0603)
Internet Explorer 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 Explorer 5.01
_WIN32_IE_IE501 (0x0501)
Internet Explorer 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, используйте следующую команду:
Обратите внимание, что некоторые функции, представленные в последней версии 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-байтами и не приведет к сбоям выравнивания на процессорах, которые обеспечивают выравнивание данных.
Более быстрые сборки с меньшими файлами заголовков
Вы можете уменьшить размер файлов заголовков Windows, исключив некоторые из менее распространенных объявлений API следующим образом:
Определите WIN32_LEAN_AND_MEAN, чтобы исключить ТАКИЕ API, как криптография, DDE, RPC, оболочка и сокеты Windows.
#define WIN32_LEAN_AND_MEAN
Определите один или несколько символов API NO, чтобы исключить API. Например, NOCOMM исключает API последовательной связи. Список символов API NOподдержки см. в разделе Windows.h.
Разработчики Windows имеют различные варианты создания приложений, работающих в Windows. В этом модуле представлены платформы пользовательского интерфейса Windows, доступные для разработки Windows. Он также содержит рекомендации по выбору оптимальной платформы для вашего приложения.
Идентифицирует строку как Юникод, если ЮНИКОД определен директивой препроцессора во время компиляции. В противном случае макрос идентифицирует строку как строку ANSI.