如何使用DirectX 11与Visual Studio 2015工具集v140在Windows 7

How to use DirectX 11 with Visual Studio 2015 toolset v140 on Windows 7

本文关键字:v140 工具集 Windows 2015 Studio DirectX 何使用 Visual      更新时间:2023-10-16

我正在制作基于DirectX 11的项目。在此之前,我一直在使用Visual Studio 2012和v110工具集开发它。然后我有了使用c++ 11标准的需求,所以我决定把它转移到Visual Studio 2015。我也在使用Windows 7,并希望我的项目与这个平台兼容(所以我使用标准的Win项目,而不是通用平台)。

在这里,我有一个新的VS工具集v140的问题。由于使用DirectX 11 2010年6月SDK,我面临以下编译错误:

1>C:Program Files (x86)Windows Kits8.1Includeshareddxgi1_2.h(1271): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:Program Files (x86)Windows Kits8.1Includeshareddxgi1_2.h(1271): error C2143: syntax error: missing ',' before '*'
1>C:Program Files (x86)Windows Kits8.1Includeshareddxgi1_2.h(1275): error C2061: syntax error: identifier 'DXGI_RGBA'

我还使用了特效11和D3DX。所以我不得不用新的工具集重新编译效果。D3DX库呢?我知道它不建议使用。在我看来,正是这个库导致了编译错误。

我也检查了DirectX 11的使用直接从Windows工具包在一个新的清晰的项目(在我的情况下,它是使用8.1工具包)。没有D3DX库也能正常工作。

是否有办法同时使用D3DX库和Win Kits,这样就不会产生兼容性问题?或者我应该使用一些库而不是D3DX(如DXTK)?

乌利希期刊指南

我试图从我的项目和D3DX11Tex中排除D3DX,并完全适应Windows套件8.1 + DirectXMath + DirectXTex(来自微软的Git库)。下一个错误发生了6次:

1>C:Program Files (x86)Microsoft Visual Studio 14.0VCincludextree(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 6月2010 SDK,并且不要试图链接一些不存在的头,如D3DX11Tex)?

解决方案:xtree.h的问题是在带有非常量操作符()的std::map的自定义函子中。因此,将其更改为常数可以解决所有6个错误。

关于DirectX的问题…不幸的是,这是真的没有办法使用旧版本的新VS.所以正如它在回答和评论中提到的,不要使用D3DX。谢谢大家!

2010年6月的SDK非常旧,并且与最新的Windows工具包冲突,正如您所看到的。Direct3DX也被弃用了,并且没有真正的工作在做了。

部分内容已由微软在GitHub公共帐户dxtk上重写。你可以考虑使用它。但是,您将无法使原始D3DX与现代版本的Windows SDK一起工作。

你的问题的解决方案是删除对2010年6月DirectX SDK的依赖,并替换你的项目中使用不赞成的功能的部分。作为替换,可以使用dxtk或您自己重写的特性。