1

我最近搬到了 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 文件作为项目的一部分编译时会发生这种情况。

任何帮助或建议表示赞赏,谢谢。

4

1 回答 1

5

并升级我所有的 c++ 项目以使用 8.1 的 windows SDK

那就是出错的地方。当您使用 v120_xp 工具集时,您使用的是版本的 Windows SDK。7.1 版,最后一个仍与 XP 兼容的版本。使用不同的#include 文件,以及较旧的构建工具(如 midl.exe)。

您不能在 8.1 版本的 d3d10sdklayers.idl 上使用这个旧版本的 midl.exe。它包含不知道如何处理的属性。它扼杀了_Field_size_(DescriptionByteLength)该文件中存在的内容。只有 midl.exe 的 8.x 版本可以处理它。

遇到这个问题你还挺幸运的,8.1 SDK 头文件中有很多隐藏的陷阱会导致你的程序无法在 XP 上正常工作。也很难诊断。如果您需要 XP 兼容性,那么您必须使用 7.1 标头。您必须修复对项目造成的损害,大概是 VC++ 目录设置。还是放弃支持XP吧,时候到了。

于 2014-07-15T11:43:23.723 回答