繁体   English   中英

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

[英]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 11Windows 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在哪里?

  • VC ++目录的include / lib路径必须采用相反的传统顺序,因此在它们冲突的地方可获得新的标题
  • 你需要明确包括d3d11.hdxgi.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM