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