我的开发平台是Windows 7 x64。我已经安装了VS2012,我想编译一个包含一些Dx11代码的项目。
具体来说,它包括以下文件:
#include <d3dx11.h>
#include <d3dx10.h>
和
的链接#pragma comment (lib, "d3dx11.lib")
#pragma comment (lib, "d3dx10.lib")
我已经在我的开发机器上安装了VS2011,但我想在VS2012中尝试使用本机C ++的单元测试工具。
由于安装了VS2011并使用DirectShow代码,我安装了Windows 7.1 SDK。
VS2012选择了这个并引用了7.1 SDK,但在VS2012下使用7.1 SDK引用的项目编译给出了错误:
"warning C4005: '__useHeader' : macro redefinition"
我用Google搜索并找到了a query like mine on social.msdn.microsoft.com。并且解决方案建议使用Windows 8工具包而不是7.1 SDK进行链接以解决此问题。
Windows 8工具包包含d3d11.h之类的标题,但不包括d3dx11.h。
如何将d3dx11(来自Dx SDK)与Windows 8套件一起包含在内,但是没有出现多个“宏重新定义”错误?
答案 0 :(得分:17)
我在this MSDN page中找到了以下相当恼人的引用。
D3DX不被视为在Windows中使用Direct3D的规范API 8因此不包含在相应的Windows SDK中。 研究使用Direct3D API的备用解决方案。
对于旧版项目,例如Windows 7(及更早版本)DirectX SDK 样本,以下步骤是构建应用程序所必需的 D3DX使用DirectX SDK:
按如下所示修改项目的VC ++目录以使用右侧 订购SDK标头和库。
我。打开项目的“属性”,然后选择“VC ++目录” 页面。
II。选择所有配置和所有平台 III。设置这些目录如下:可执行目录:(在右侧下拉列表中)
包含目录:$(IncludePath); $(DXSDK_DIR)包含
包含库目录:$(LibraryPath); $(DXSDK_DIR)Lib \ x86
IV。单击“应用” v。选择x64平台。 六。按如下方式设置Library目录:
图书馆目录:$(LibraryPath); $(DXSDK_DIR)Lib \ x64
您的“d3dx9.h”,“d3dx10.h”或“d3dx11.h”包含在哪里 项目,一定要明确包括“d3d9.h”,“d3d10.h”和 “dxgi.h”,或“d3d11.h”和“dxgi.h”首先确保你正在接受 较新的版本。
如果需要,您可以禁用警告C4005;但是,这个警告 表示您使用的是旧版本的标题。
删除项目中对DXGIType.h的所有引用。这个标题 在Windows SDK和DirectX SDK版本中不存在 与新的winerror.h冲突。
所有D3DX DLL都安装在您的开发计算机上 DirectX SDK安装。确保必要的D3DX依赖项 与任何样本或您的应用程序一起重新分发 搬到另一台机器上。
请注意D3DX11当前使用的替代技术 包括DirectXTex和DirectXTK。 D3DXMath被DirectXMath取代。
FFS微软,请不要像这样更改API的中期版本!!!