d3dx11.h不在Windows 8.0套件中。

15

我的开发平台是Windows 7 x64。我已经安装了VS2012,想编译一个包含一些Dx11代码的项目。

具体来说,它包括以下文件:

#include <d3dx11.h>
#include <d3dx10.h>

并且链接到

#pragma comment (lib, "d3dx11.lib")
#pragma comment (lib, "d3dx10.lib")

我的开发机上已经安装了VS2011,但我想尝试一下VS2012为本地C++提供的单元测试工具。

由于我在DirectShow代码上使用VS2011,因此我安装了Windows 7.1 SDK。

VS2012检测到了这个SDK并有对7.1 SDK的引用,但是在VS2012下使用7.1 SDK编译我的项目时出现了错误:

"warning C4005: '__useHeader' : macro redefinition"

我在谷歌上搜索后发现social.msdn.microsoft.com上有一个类似我的查询,建议使用Windows 8工具包而不是7.1 SDK来解决这个问题。

Windows 8工具包包括像d3d11.h这样的标头文件,但不包括d3dx11.h。

如何将Dx SDK中的d3dx11与Windows 8工具包一起使用,但又不会出现多个“宏重定义”错误?

1个回答

17
我在这个MSDN页面上找到了以下令人非常烦恼的引用:

D3DX不被视为在Windows 8中使用Direct3D的规范API,因此没有包含在相应的Windows SDK中。请尝试其他解决方案来使用Direct3D API。

对于传统项目(如Windows 7(及更早版本)DirectX SDK示例),构建使用DirectX SDK的D3DX应用程序需要执行以下步骤:


按照以下方式修改项目的VC ++目录,以使用正确的SDK头文件和库的顺序。

i. 打开项目的“属性”,选择VC ++目录页面。
ii. 选择所有配置和所有平台。
iii. 将这些目录设置如下:

可执行目录:(在右侧下拉菜单上)

包含目录:$(IncludePath); $(DXSDK_DIR)Include

包含库目录:$(LibraryPath); $(DXSDK_DIR)Lib\x86

iv. 单击应用。
v. 选择x64平台。 vi. 将库目录设置如下:

库目录:$(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存在冲突。

DirectX SDK安装会将所有的D3DX DLLs安装到开发计算机上。如果示例或应用程序要移动到其他计算机上,请确保重新分发所需的D3DX依赖项。

请注意,替代当前D3DX11使用的技术包括DirectXTex和DirectXTK。D3DXMath被DirectXMath替换。

微软,拜托了,不要像这样在版本中途更改API!!!


7
同意,特别是目前所有关于DirectX11的书籍都广泛使用d3dx11.h,太疯狂了! - JMK
请查看此博客文章 - Chuck Walbourn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接