syntax error: identifier 'DXGI_RGBA in file dxgi1_2.h

syntax error: identifier 'DXGI_RGBA in file dxgi1_2.h

正在尝试将 Directx 工具包集成到我的游戏中。我按照这里的步骤操作:

https://github.com/Microsoft/DirectXTK/wiki/Adding-the-DirectX-Tool-Kit

一切都很顺利。当尝试包含 headers (SpriteFont.h) 之一时,我收到这些错误

我已将项目重构为 8.1 以匹配我的游戏,并重建了导入的项目并且效果很好。在重建我的项目时,我得到了这些错误。

(我已经确保在我的 directx headers 之前包含 windows.h。

求助!

您很可能将旧版 DirectX SDK headers 与 Windows 8.x SDK headers 混合使用,并将旧 DXGI headers 与新版混合使用那些。如 MSDN 所述,如果您想将旧的 DirectX SDK 与 Windows 8.x SDK 混合使用,则需要反转传统的包含路径顺序。

不要使用这个:

<IncludePath>$(DXSDK_DIR)Include$(IncludePath);</IncludePath>
<LibraryPath>$(DXSDK_DIR)Lib\x86$(LibraryPath);</LibraryPath>
<LibraryPath>$(DXSDK_DIR)Lib\x64;$(LibraryPath);</LibraryPath>

使用这个:

<IncludePath>$(IncludePath);$(DXSDK_DIR)Include</IncludePath>
<LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib\x86</LibraryPath>
<LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib\x64;</LibraryPath>

还有一些 #include 技巧,如果你使用像 D3DX headers 这样的旧东西,它可以隐式地选择旧的 headers。

理想情况下,您应该删除所有对旧版 DirectX SDK 路径的使用,但如果您想在 Windows7 上使用 XAudio,则需要继续使用它。有关详细信息,请参阅 wiki

您或许可以尝试在 .cpp 文件中使用 #include "SpriteFont.h" 而不是 .h 头文件。 我用这种方法解决了这个问题。

如果您想使用旧版 DirectX SDK 和更新的 Visual studio 版本(例如 vs2015 或 vs2017 或 vs2019)。我建议您阅读这篇 link from book official site。我认为官方网站遗漏了一些东西:

  1. 对于您编译的每个代码示例,确保

    $(DXSDK_DIR)\Utilities\bin\x86;在 $(ExecutablePath);

    之前

    ..\共同;$(DXSDK_DIR)\包括;在 $(IncludePath)

    之前

    $(DXSDK_DIR)\Lib\x86;....\Common;$(VC_LibraryPath_x86);在 $(WindowsSDK_LibraryPath_x86)

    之前

当你构建 Effects 框架时,你也应该保证这个顺序。

  1. 将文件:d3dx11effect.h、Effects11d.lib和Effects11.lib复制到 本书的Common目录(覆盖旧的)。

将 d3dx11effect.h 复制到 Common 目录后,您需要像这样更改一行:

  1. 如果遇到这个错误

dxerr.lib(dxerrw.obj) : error LNK2019: unresolved external symbol __vsnwprintf referenced in function "long __stdcall StringVPrintfWorkerW(unsigned short *,unsigned int,unsigned int *,unsigned short const *,char *)" (?StringVPrintfWorkerW@@YGJPAGIPAIPBGPAD@Z)

您可以添加 legacy_stdio_definitions.lib;像这样: without needing to add dxerr.h and dxerr.cpp to book’s Common directory and add these two files to your project dxerr.h 和 dxerr.cpp 现在是 here.

  1. 我提交我的 vs2019 可构建代码 here。它是第 1 章和第 6 章的盒子演示,但我会在学习这本书时构建更多章节。

欢迎在此处发表评论或 github repo!