Использование заголовков Windows
Файлы заголовков для API Windows позволяют создавать 32-разрядные и 64-разрядные приложения. Они включают объявления для версий API Юникода и ANSI. Дополнительные сведения см . в Юникоде в API Windows. Они используют типы данных, позволяющие создавать 32-разрядные и 64-разрядные версии приложения из одной базы исходного кода. Дополнительные сведения см. в статье "Подготовка к работе с 64-разрядной версией Windows". К дополнительным функциям относятся заметки заголовков и проверка типов STRICT.
- Visual C++ и файлы заголовков Windows
- Макросы для условных объявлений
- Настройка WINVER или _WIN32_WINNT
- Управление упаковкой структуры
- Более быстрые сборки с меньшими файлами заголовков
- Связанные статьи
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 "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, используйте следующую команду:
cl -c /D_WIN32_WINNT=0x0502 source.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 (выравнивание элементов структуры) или пакет.
Более быстрые сборки с меньшими файлами заголовков
Вы можете уменьшить размер файлов заголовков 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
См. также