每当我在项目中包含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.0
和DirectX
。我试过没有运气重新安装let navigationViewController = NavigationViewController(for: route, locationManager: navigationLocationManager())
navigationViewController.delegate = self
present(navigationViewController, animated: true, completion: nil)
。这是我得到的一些错误的图像:
感谢任何帮助。
答案 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} }:
d3d11.h
和dxgi.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年中所做的各种帖子。