包含“D3DX11Effect.h”时的数百个错误

时间:2018-01-28 19:04:22

标签: c++ directx directx-11

每当我在项目中包含DirectX时,我会从多个不同的D3DX11Effect.h头文件中收到数百个错误,这些错误在我不包含#include <string> #include <dwmapi.h> #include <iostream> #include <Windows.h> #include <vector> #include <thread> #include <chrono> #include <string> #include <sstream> #include <TlHelp32.h> #include <exception> #include <memory> #include <vector> #include <D3D11.h> #include <d3dx11.h> #include <DXErr.h> #include <D3DX11async.h> #include <D3DX11Effect.h> #include <D3Dcompiler.h> #include <D3D11Shader.h> #include <FW1FontWrapper.h> #include "../Drawing/ImGUI/imgui.h" #include "../Drawing/DirectX.h" #include "../Drawing/imgui_dx11.h" #include "../Drawing/ShaderFX.h" #include "../Drawing/Renderer.h" #include "Global.h" 时不会给我带来错误。这些是我的包括:

Direct X 11

我正在使用Windows SDK version 10.0.16299.0DirectX。我试过没有运气重新安装let navigationViewController = NavigationViewController(for: route, locationManager: navigationLocationManager()) navigationViewController.delegate = self present(navigationViewController, animated: true, completion: nil) 。这是我得到的一些错误的图像:

enter image description here

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

TL; DR:阅读MSDN

不推荐使用DirectX SDK,Windows 8.0 SDK,Windows 8.1 SDK和Windows 10 SDK标头 newer ,而不是旧版DirectX SDK中提供的标头。你得到了旧标题和hew标题的混合,这就是你得到这些错误的原因。

首先要考虑的是你是否需要使用传统的DirectX SDK。理想情况下,你只是不使用它。这意味着避免使用本身也被弃用的D3DX11实用程序库。您可以在文章Living without D3DX中找到针对该功能的大量开源替代品,包括最新版本的Effects for Dirct3D 11

可以继续使用与现有版本的Windows SDK混合使用的旧版DirectX SDK,但您需要小心谨慎,如MSDN页面底部所述{{3} }:

  • VC ++目录包含/ lib路径必须采用反向传统顺序,这样您才能获得与其冲突的新标题
  • 您需要明确包含d3d11.hdxgi.h ,然后包含d3dx11.h,否则您的版本就会错误 - 这正是上面发生的事情;您使用的是过时版本的dxgi和/或d3dcommon
  • 对于dxerr.h,按照Where is the DirectX SDK?的说明构建您自己的版本,因为(a)它不在Windows SDK中提供,并且(b)旧版DirectX SDK中提供的版本不是与现代版本的Visual C ++完全兼容。
  

请注意,C2440 static_cast cannot convert from const char[6] to char *中隐藏在图片中的错误renderer.h与上述问题无关。这是因为现代C ++ 11对字符串文字的规则不允许将它们用作非const。您应该修复代码,但如果您不关心可移植性/一致性,也可以关闭here。无论如何,请花些时间阅读strictstrings

请参阅const correctness以全面剖析哪些标头冲突,哪些标头是DirectX SDK独有的,以及哪些标签对现代版Windows上的DirectX 11游戏有任何价值。

您应该在The Zombie DirectX SDK上查看我过去8年中所做的各种帖子。