Что подключает данная строка: "#include <SDKDDKVer.h>"?

29
1
0
19 июня
13:02
19 июня
13:50

Windows SDK Version. DDK - как понял, Driver Development Kit, более не существующий (поглощенный SDK). Все, что относится к драйверам сейчас идет в составе WDK.

Данный хедер инклудится обычно в targetver.h, тот в свою очередь создается из шаблона проекта C++ Win32 в Visual Studio. Определяет макро-константу WINVER, которая позволяет другим хедерам динамически проверить версию Windows, под которую производится построение (с помощью #if). Значение константы таким образом влияет на то, какие функции и с какими сигнатурами будут доступны из различных заголовков, вроде Windows.h. Какой именно файл с какими константами подключается - настраивается в свойствах проектах, где есть Target OS Version, а так же зависит от версии компилятора (Platform Toolset), но это не одно и то же.

Например, есть функция DoExampleEx, которая принимала аргументы (int,) для kernel32.dll версии Windows XP, но в Windows 10 сигнатура изменилась на (int,HANDLE). Сборка с неправильной сигнатурой покрошит программу при исполнении с другой версией kernel32.dll. Что бы делать правильный таргетинг при построении приложения и оно смогло работать на Windows XP, нужно заставить заголовки определять подходящие функции и их сигнатуры. Разработчики из Microsoft и многих других компаний используют эту константу и их аналоги для решения проблем динамической линковки. Но вы можете в targetver.h определить версию самостоятельно.

Modifying WINVER

Кстати, порядок включений имеет определяющее значение. В вашем проекте targetver.g/winsdkddkver.h должны подключаться самыми первыми, например в stdafx.h, иначе поведение не определено, как говориться, с этим макросом.

Dmitrij IgorevichОтвечает на ваши вопросы в своейПрямой линии
3
0
Если вы знаете ответ на этот вопрос и можете аргументированно его обосновать, не стесняйтесь высказаться
Ответить самому
Выбрать эксперта