C++ 如何在Windows 7上使用DirectX 11和Visual Studio 2015工具集v140

C++ 如何在Windows 7上使用DirectX 11和Visual Studio 2015工具集v140,c++,visual-studio,visual-studio-2012,directx-11,visual-studio-2015,C++,Visual Studio,Visual Studio 2012,Directx 11,Visual Studio 2015,我正在做基于DirectX 11的项目。之前,我一直在使用VisualStudio2012和v110工具集开发它。然后我需要使用C++ 11标准,所以我决定把它移到Visual Studio 2015。另外,我使用的是Windows7,希望我的项目与这个平台兼容(所以我使用的是标准Win项目,而不是通用平台) 在这里,我有一个新的VS工具集v140的问题。由于使用DirectX 11 2010年6月SDK,我面临下一个编译错误: 1>C:\Program Files (x86)\Windo

我正在做基于DirectX 11的项目。之前,我一直在使用VisualStudio2012和v110工具集开发它。然后我需要使用C++ 11标准,所以我决定把它移到Visual Studio 2015。另外,我使用的是Windows7,希望我的项目与这个平台兼容(所以我使用的是标准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。因此,我必须使用新的工具集重新编译效果11。D3DX库呢?我知道不推荐使用它。在我看来,正是这个库导致了编译错误

此外,我还检查了在一个新的clear项目中直接从Windows工具包使用DirectX 11的情况(在我的例子中,它使用的是8.1工具包)。没有D3DX库,它可以正常工作

有没有办法同时使用D3DX库和Win工具包,这样就不会产生兼容性问题?或者我应该使用一些库而不是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不是作为单个包含在层次结构的顶部,而是层次结构中的每个文件都包含这个头文件)

Qestions:此文件在哪里使用(我不直接包括它)?这可能是一个链接问题吗?或者是某些版本之间又出现了某种冲突(我不知道如何解决,因为我不使用Dx11 June 2010 SDK,也不尝试链接一些不存在的头文件,如D3DX11Tex)

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


那DirectX问题呢。。。不幸的是,这是真的没有办法使用新的VS旧版本,因此,正如在回答和评论中提到的,不要使用D3DX。谢谢大家

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

它的一部分已经被微软在一个名为GitHub的公共GitHub帐户上重写。你可以考虑使用它。但是,您将无法使原始D3DX与现代版本的Windows SDK配合使用


您的问题的解决方案是删除对2010年6月DirectX SDK的依赖,并替换项目中使用不推荐功能的部分。作为替代,请使用dxtk或您自己重写的功能。

谢谢,我已经尝试过了,但是在xtree.h中出现了新的错误。你知道是什么导致了这些错误吗?你也在使用11的效果吗?是的,就是这个。我已经检查了所有依赖项-directx的所有包含项都来自Win Kits\8.1。请确保看到,和。为什么标记为关闭?这是一个完全合理的问题,就像真的没有办法将旧的DirectX 11 SDK(2010年6月)与Win Kits的新SDK一起使用一样。您所需要的只是将所有“旧代码”从库中更改为新代码,答案中提到了这一点。您需要做的最后一件事是强制执行正确的WinT版本,因为新库使用它来决定应该使用哪些函数(例如CreateFile2(Win8及更高版本)或CreateFile(与Win7兼容).我不确定我是否必须将其应用到解决方案中,是否应该消除我自己在xtree上的问题,我认为这与DirectX sdk有某种联系。