我正在基于DirectX 11创建该项目。以前,我一直在使用带有v110工具集的Visual Studio 2012进行开发。然后,我需要使用C ++ 11标准,因此我决定将其移至Visual Studio2015。另外,我正在使用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库又如何-我知道不建议您使用它。在我看来,正是这个库会导致编译错误。
另外,我已经在一个新的清晰项目中直接从Windows套件检查了DirectX 11的使用(在我的情况下,它使用的是8.1套件)。没有D3DX库,它可以正常工作。
有什么办法可以同时使用D3DX库和Win Kit,从而不会造成兼容性问题?还是应该使用某些库而不是D3DX(例如DXTK)?
UPD
我尝试将D3DX从我的项目和D3DX11Tex中排除,并使其完全适用于Windows Kits \ 8.1 \ + DirectXMath + DirectXTex(Microsoft 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的问题在于使用非常数operator()的std :: map的自定义函子。因此,将其更改为常数可以解决所有6个错误。
那DirectX问题呢...不幸的是,实际上没有办法将旧版本与新VS一起使用。因此,正如在答案和评论中提到的那样,根本不要使用D3DX。谢谢大家!
如您所见,2010年6月版SDK很旧,并且与最新的Windows工具包冲突。Direct3DX也已被弃用,并且不再对其进行任何实际工作。
它的一部分已由Microsoft在名为dxtk的公共GitHub帐户上重写。您可以考虑使用它。但是,您将无法使原始D3DX与现代版本的Windows SDK一起使用。
解决此问题的方法是删除对2010年6月DirectX SDK的依赖性,并替换项目中使用不推荐使用的功能的部分。作为替代,使用dxtk或您自己重写的功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句