我是基于DirectX 11开发这个项目的。以前,我一直在用Visual 2012开发v110工具集。然后我需要使用C++ 11标准,所以我决定将它移到Visual 2015中。另外,我正在使用Windows 7,并且希望我的项目与这个平台兼容(所以我使用标准Win项目,而不是通用平台)。
在这里,我遇到了一个新的VS工具集v140的问题。由于使用DirectX 11,2010年6月SDK,我遇到了下一个编译错误:
1>C:\Program Files (x86)\Windows Kits\8.1\Include\shared\dxgi1_2.h(1271): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\8.1\Include\shared\dxgi1_2.h(1271): error C2143: syntax error: missing ',' before '*'
1>C:\Program Files (x86)\Windows Kits\8.1\Include\shared\dxgi1_2.h(1275): error C2061: syntax error: identifier 'DXGI_RGBA'我还使用了effects11和D3DX。所以我不得不用新的工具集重新编译effects11。那么D3DX库呢?我知道它不会被推荐使用。在我看来,这个库确实会导致编译错误。
此外,我还在一个新的清除项目中直接检查了DirectX 11的使用情况(在我的例子中,它使用的是8.1kit)。没有D3DX库,它工作得很好。
有没有办法同时使用D3DX库和Win工具包,这样就不会产生兼容性问题?或者我应该使用一些库而不是D3DX (比如DXTK)?
UPD
我试图将D3DX排除在我的项目和D3DX11Tex之外,并将其完全应用于Windows \8.1\+ DirectXMath + DirectXTex (来自微软Git的库)。下一个错误发生了6次:
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xtree(2047): error C3848: expression having type 'const `anonymous-namespace'::StringCompare' would lose some const-volatile qualifiers in order to call 'bool `anonymous-namespace'::StringCompare::operator ()(PCHAR,PCHAR)'包含xtree.h的目录是自动包含在项目路径中的。据我所知,这是可以的。
导致此错误的代码是下一个:
bool _Compare(const key_type& _Left, const key_type& _Right) const
{ // compare key_type to key_type, with debug checks
return (_DEBUG_LT_PRED(this->_Getcomp(), _Left, _Right));
}所有6个错误都指向xtree.h中的代码。顺便说一句,我在许多头中都包含了d3d11.h,它们彼此链接了很多次(就像d3d11.h不是作为单个包含在层次结构的顶部,但是层次结构中的每个文件都包含这个标头)。
问题:在哪里使用这个文件(我不直接包括它)?会不会是一个链接问题的王者?或者这又是一些版本之间的冲突(我不知道怎么做,仅仅因为我没有使用Dx11 2010年6月SDK,并且不尝试链接一些不存在的标题,比如D3DX11Tex)?
解决方案:使用xtree.h的问题是自定义函子中的std::map和非常量操作符()。因此,将它改为常量,解决了所有6个错误。
那DirectX的问题..。不幸的是,在新的VS中使用旧版本是不可能的。因此,正如在回答和评论中提到的那样,根本不要使用D3DX。感谢大家!
发布于 2016-08-16 02:58:15
正如您所看到的,2010年6月的SDK非常老,并且与最新的Windows工具包发生了冲突。Direct3DX也被废弃了,现在已经没有真正的工作要做了。
其中一部分是微软在一个名为GitHub的公共德克账户上重写的。你可以考虑用这个。但是,您将无法使原始D3DX与Windows的现代版本一起工作。
解决问题的方法是消除对2010年6月DirectX SDK的依赖,并替换项目中使用废弃特性的部分。作为替代,可以使用dxtk或您自己重写的特性。
https://stackoverflow.com/questions/38954144
复制相似问题