Недавно я перешел на Visual Studio 2013 и обновил все свои проекты на c ++, чтобы использовать 8.1 Windows SDK и набор инструментов v120_xp. Подавляющее большинство проектов компилируется и работает нормально, однако у меня есть два проекта, которые отказываются создавать с несколькими ошибками, подобными следующей:
error MIDL2072: inapplicable attribute : [annotation] [ Field 'pDescription' of Struct 'D3D10_MESSAGE' ( Type 'D3D10_MESSAGE' ) ]
Все ошибки относятся к файлу d3d10sdklayers.idl. Это происходит, когда IDL-файл проекта компилируется как часть проекта, если я компилирую файл сам по себе.
Любая помощь или предложения приветствуются, спасибо.
и обновить все мои проекты C ++, чтобы использовать 8.1 из Windows SDK
Вот где это пошло не так. Когда вы используете набор инструментов v120_xp, то вы используете старый версия Windows SDK. Версия 7.1, последняя, которая до сих пор совместима с XP. С #include отличными файлами и инструментами сборки, такими как midl.exe, которые старше.
Вы не можете использовать эту старую версию midl.exe в 8.1 версии d3d10sdklayers.idl. Он содержит атрибуты, которые он не знает, как обрабатывать. Это душит _Field_size_(DescriptionByteLength)
это присутствует в этом файле. Только 8x версия midl.exe может справиться с этим.
Вам повезло столкнуться с этой проблемой, в заголовках 8.1 SDK есть гораздо больше скрытых ловушек, из-за которых ваша программа не работает должным образом на XP. Довольно сложно диагностировать тоже. Если вам требуется совместимость с XP, то вы должен используйте заголовки 7.1. Вы должны будете исправить ущерб, нанесенный проектам, предположительно в настройках каталогов VC ++. Или отказаться от поддержки XP, время пришло.