1

我正在制作基于DirectX 11的项目。以前,我一直使用Visual Studio 2012和v110工具集开发它。然后我需要使用C++ 11标准,所以我决定将它移到Visual Studio 2015.我也使用Windows 7,并希望我的项目与此平台兼容(所以我使用标准的Win项目,而不是用于通用平台)。如何在Windows 7上将DirectX 11与Visual Studio 2015工具集v140一起使用

在这里,我遇到了新的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 Kits,这样它就不会产生兼容性问题?或者我应该使用一些库而不是D3DX(如DXTK)?

UPD

我试图从我的项目,D3DX11Tex排除D3DX并完全适应它的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包含的目录自动包含在项目路径中。据我所知,这是可以的。

whick导致此错误的代码是下一个:

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)?

SOLUTION:xtree.h是自定义的函子为STD中的问题::地图与非常数算子()。所以把它改为一个恒定的解决了所有6个错误。

DirectX问题怎么样...不幸的是,它是真的没有办法使用旧版本的新VS.正如答案和评论中提到的那样,根本不要使用D3DX。谢谢大家!

+0

一定要看到[MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx),[哪里的DirectX SDK(2015年版)?(HTTPS ://blogs.msdn.microsoft.com/chuckw/2015/08/05/where-is-the-directx-sdk-2015-edition/)和[Living without D3DX](https://blogs.msdn。 microsoft.com/chuckw/2013/08/20/living-without-d3dx/)。 –

+0

为什么这个标记关闭?这是一个完全合理的问题。 – Robinson

+0

这是真的没有办法使用旧的DirectX 11 SDK(2010年6月)与Win Kits的新SDK。所有你需要的是将所有“旧代码”从库中改为新代码,并在答案中提到。你需要做的最后一件事是强制**正确的** _WIN32_WINNT版本,因为新库使用它来决定应该使用哪些函数(例如CreateFile2(Win8和更新)或CreateFile(Win7兼容)不敢肯定我有把这个成解决方案,我应该删除我自己的的XTree,我认为与DirectX SDK中。 –

回答

2

2010年6月SDK是很老了,冲突与最新的Windows套件,如你所看到的。 Direct3DX也被弃用,而且现在还没有真正的工作要做。它

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

的解决问题的方法是删除在2010年6月的DirectX SDK的依赖,并替换您的项目使用了已弃用的功能的一部分。作为替代,请使用dxtk或您自己的重写功能。

+0

某种联系谢谢,我已经试过的问题,但都得到了与xtree.h新的错误你是否有什么可能导致这些错误的任何想法? –

+0

您是否使用来自[GitHub的(https://github.com/Microsoft/fx11)以及影响11? –

+0

是的,正是这一点[一](HTTPS ://github.com/Microsoft/FX11)我已经检查了所有的依赖 - 所有包含的directx都来自Win Kits \ 8.1。 –

相关问题