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

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

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

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

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

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

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

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

Минимальная требуемая система Значение для _ версии нтдди
Windows 10 1903 "19H1" Нтдди _ WIN10 _ 19H1 (0x0A000007)
Windows 10 1809 "Redstone 5" Нтдди _ WIN10 _ RS5 (0x0A000006)
Windows 10 1803 "Redstone 4" Нтдди _ WIN10 _ RS4 (0x0A000005)
Windows 10 1709 "Redstone 3" Нтдди _ WIN10 _ RS3 (0x0A000004)
Windows 10 1703 "Redstone 2" Нтдди _ WIN10 _ RS2 (0x0A000003)
Windows 10 1607 "Redstone 1" Нтдди _ WIN10 _ RS1 (0x0A000002)
Windows 10 1511 "пороговое значение 2" Нтдди _ WIN10 _ Th2 (0x0A000001)
Windows 10 1507 "пороговое значение" Нтдди _ WIN10 (0x0A000000)
Windows 8.1 Нтдди _ ВИНБЛУЕ (0x06030000)
Windows 8 Нтдди _ WIN8 (0x06020000)
Windows 7 Нтдди _ WIN7 (0x06010000)
Windows Server 2008 Нтдди _ WS08 (0x06000100)
Windows Vista с пакетом обновления 1 (SP1) Нтдди _ VISTASP1 (0x06000100)
Windows Vista Нтдди _ VISTA (0x06000000)
Windows Server 2003 с пакетом обновления 2 (SP2) Нтдди _ WS03SP2 (0x05020200)
Windows Server 2003 с пакетом обновления 1 (SP1) Нтдди _ WS03SP1 (0x05020100)
Windows Server 2003 Нтдди _ WS03 (0x05020000)
Windows XP с пакетом обновления 3 (SP3) Нтдди _ WINXPSP3 (0x05010300)
Windows XP с пакетом обновления 2 (SP2) Нтдди _ WINXPSP2 (0x05010200)
Windows XP с пакетом обновления 1 (SP1) Нтдди _ WINXPSP1 (0x05010100)
Windows XP Нтдди _ WINXP (0x05010000)

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

Минимальная требуемая система Минимальное значение для _ Win32 _ Winnt и winver
Windows 10 _ Win32 _ WinNT _ WIN10 (0x0A00)
Windows 8.1 _ Win32 _ WinNT _ винблуе (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 сервер 2003 с SP1, Windows XP с пакетом обновления 2 (SP2) _ Win32 _ WinNT _ WS03 (0x0502)
Windows сервер 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 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.0 a, 5.0 b _ 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 со значением для следующей основной версии операционной системы. например, функция жетдллдиректори была введена в Windows Server 2003 и условно определена, если _ WIN32 _ WINNT — 0x0502 или более поздней версии. эта функция также была добавлена в Windows XP с пакетом обновления 1 (SP1). таким образом, если вы определили _ WIN32 _ WINNT как 0x0501 для Windows XP, вы бы пропустили функции, определенные в Windows XP с пакетом обновления 1 (SP1).

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

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

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

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

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

  • определение _ экономичности WIN32 _ и _ среднего значения для исключения api-интерфейсов, таких как шифрование, DDE, RPC, оболочка и Windows сокеты.

    #define WIN32_LEAN_AND_MEAN

  • Определите один или несколько символов API , чтобы исключить API. Например, параметр WITH исключает интерфейс API последовательного взаимодействия. список неподдерживаемых символов api см. в разделе Windows. h.

    #define NOCOMM

Windows Сайт скачивания пакета SDK