未解析的外部符号_IID_IDXGIAdapter4

问题描述

这真的很奇怪。...

我认为_IID_IdxgiAdapter4中的这个符号dxguid.lib,但是当我使用DUMPBIN命令检查dll中的符号时。有_IID_IdxgiAdapter1~3,没有_IID_IdxgiAdapter4

Windows SDK:10.0.18362.0

最奇怪的是,我发现了一个使用IdxgiAdapter4的DX12教程,我可以成功编译它,但是即使复制他的项目设置,我的项目也无法完成。

https://github.com/jpvanoosten/LearningDirectX12/blob/v0.0.1/Tutorial1/src/main.cpp

在这个项目中,他仅使用d3d12.libdxgi.libdxguid.lib,而我已经将它们放入项目设置中。

解决方法

这是一个疏忽,已在当前版本之后的下一个Windows 10 SDK中修复(即19041仍然存在该错误)。

DXGUID.LIB丢失:

  • IID_IDXGIAdapter4
  • IID_IDXGIOutput6
  • IID_IDXGIFactory6
  • IID_IDXGIFactory7

GitHub上也有报道。

dxguid.lib没什么特别的。就是这样的代码:

#define INITGUID
#include <Windows.h>

#include <d3dcommon.h>

#include <dxgi1_5.h>
#include <dxgidebug.h>

#include <d3d11_4.h>
#include <d3d11shader.h>
#include <d3d11sdklayers.h>

#include <d3dcompiler.h>

#include <d3d12.h>
#include <d3d12video.h>
#include <d3d12shader.h>
#include <d3d12sdklayers.h>

该错误是在dxguid库源文件中使用dxgi1_5.h,但我将其更新为使用dxgi1_6.h

请注意,大多数“ COM” GUID(例如Windows Imaging Component(WIC)的GUID)都位于uuid.lib中。

,
pDxgiAdapter1->QueryInterface(IID_IDXGIAdapter4,(LPVOID *)p_ppDxgiAdapter4);

更改为

pDxgiAdapter1->QueryInterface(__uuidof(IDXGIAdapter4),(LPVOID *)p_ppDxgiAdapter4);

解决我的问题

但在dxgi1_6.h

DEFINE_GUID(IID_IDXGIAdapter4,0x3c8d99d1,0x4fbf,0x4181,0xa8,0x2c,0xaf,0x66,0xbf,0x7b,0xd2,0x4e);

我仍然无法使用IID_IDXGIAdapter4