D3DX10.h 和 D3DCompiler.h 兼容性问题?

D3DX10.h and D3DCompiler.h compatibility issue?

我正在关注 DirectXTutorial,但遇到了一个我无法解决的问题。过去存在一些无法正常工作的问题,例如 D3DX11CompileFromFile(),因此我不得不使用 D3DCompileFromFile 并包含 d3dcompiler.h.

既然我要进行 3D 变换,我必须为所涉及的矩阵包括 D3DX10Math.h。为此,我不得不再次编辑我的 include 和 lib 目录以包含 DirectX SDK(2010 年 6 月)。

一旦我这样做,D3DCompileFromFile() 就会变得未定义。我已经尝试更改目录的顺序并更改 header 中包含的顺序,但我所做的似乎没有任何效果。他们只是不想一起工作。 这是我的包括:

#include <windows.h>
#include <windowsx.h>
#include <d3d11.h>
#include <d3dcompiler.h>
#include <DirectXPackedVector.h>
#include <D3DX10math.h>

连同库包括:

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

此外,目录图片: Directories

对我做错了什么有什么想法吗?还是存在某种我不知道的不兼容性?

基本问题是遗留的 DirectX SDK 已被弃用,其中的 headers 比 VS 自带的 headers 2012 年或之后。参见 MSDN

理想的解决方案是完全不使用旧版 DirectX SDK 内容。您不会将 D3DX10 用于数学,而是使用 DirectXMath. You wouldn't use D3DX11 for texture loading, but some other solution like DirectX Tool Kit. For a complete list of replacements, see Living without D3DX.

可能您使用的是较旧的教程,该教程希望您使用现在已弃用的内容,例如 D3DX11。你仍然可以这样做,但你需要格外小心。特别是,您需要在 标准包含路径之后添加 DirectX SDK include/lib 路径 。这通常在 Visual C++ 中通过编辑项目设置中的 VC++ 目录页面并确保在 结束 处添加 include/lib 路径而不是在开始——这也意味着避免使用 Additional Directories 选项,这些选项将在其他 headers/libs.

之前

查看此 MSDN 的底部和 Zombie DirectX SDK 了解更多信息。