[英]Hundreds of Errors When Including “D3DX11Effect.h”
每当我在项目中包含D3DX11Effect.h
时,就会从多个不同的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
时没有运气。 这是我遇到的一些错误的图像:
任何帮助表示赞赏。
TL; DR:阅读MSDN 。
DirectX SDK已过时,并且Windows 8.0 SDK,Windows 8.1 SDK和Windows 10 SDK标头比旧版DirectX SDK中提供的标头要新 。 您会混合使用旧标头和hew标头,这就是为什么您会收到这些错误的原因。
首先要考虑的是您是否根本需要使用旧版DirectX SDK。 理想情况下,您只是不使用它。 这意味着避免使用D3DX11
推荐使用的D3DX11
实用程序库。 您可以在“ 不带D3DX的生活 ”一文中找到该功能的许多开源替代品,其中包括最新版本的Effects for Dirct3D 11 。
您可以继续将旧版DirectX SDK与现代版本的Windows SDK混合使用,但是您需要格外小心,如MSDN页面底部所述。DirectX SDK在哪里? :
d3d11.h
和dxgi.h
你之前包含d3dx11.h
或者你结束了错误的版本-也就是上面到底发生了什么; 您正在使用dxgi
和/或d3dcommon
的过时版本。 dxerr.h
,请按照此处的说明构建您自己的版本,因为(a)Windows SDK中没有提供该版本,并且(b)旧版DirectX SDK中提供的版本与Visual C ++的现代版本不完全兼容。 请注意,图像中隐藏的错误:
C2440 static_cast cannot convert from const char[6] to char *
在renderer.h
C2440 static_cast cannot convert from const char[6] to char *
。与上述问题无关。 这是由于以下事实:现代的C ++ 11字符串文字规则不允许将它们用作非常量。 您应该修复代码,但是如果您不关心可移植性/一致性,也可以关闭strictstrings 。 无论如何,请花一些时间来阅读const正确性 。
有关哪些标头发生冲突,哪些标头是DirectX SDK所独有的,以及哪些标头在现代Windows版本上对DirectX 11游戏具有任何价值,请参见Zombie DirectX SDK 。
您还应该查看我在过去8年中就此主题发表的各种帖子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.