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++ 的单元测试工具。

由于安装了 VS2011 并使用 DirectShow 代码,我安装了 Windows 7.1 SDK。

VS2012 选择了这个并引用了 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。

如何在 Windows 8 套件中包含 d3dx11(来自 Dx SDK),但不会出现多个“宏重新定义”错误?

4

1 回答 1

17

我在这个 MSDN 页面中找到了以下相当烦人的引用。

D3DX 不被视为在 Windows 8 中使用 Direct3D 的规范 API,因此不包含在相应的 Windows SDK 中。研究使用 Direct3D API 的替代解决方案。

对于旧项目,例如 Windows 7(和更早版本)DirectX SDK 示例,以下步骤对于使用 DirectX SDK 构建具有 D3DX 的应用程序是必需的:


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

一世。打开项目的属性并选择 VC++ 目录页面。
ii. 选择所有配置和所有平台。
iii. 如下设置这些目录:

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

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

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

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

库目录:$(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 的中间版本!!!

于 2012-09-17T13:11:41.593 回答