未解析的外部符号 _IID_IDXGIAdapter4

unresolved external symbol _IID_IDXGIAdapter4

真是奇怪....

我认为这个符号_IID_IDXGIAdapter4dxguid.lib,但是当我使用DUMPBIN命令检查dll里面的符号时。有_IID_IDXGIAdapter1~3,没有_IID_IDXGIAdapter4.

Windows 开发工具包:10.0.18362.0

最奇怪的是我找到了一个使用IDXGIAdapter4的DX12教程,我可以成功编译它,但是我的项目不能,即使我复制他的项目设置。

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

在这个项目中,他只使用了d3d12.libdxgi.libdxguid.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

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

DXGUID.LIB 丢失:

  • IID_IDXGIAdapter4
  • IID_IDXGIOutput6
  • IID_IDXGIFactory6
  • IID_IDXGIFactory7

It was reported on GitHub as well.

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>

The bug was using dxgi1_5.h in the dxguid library source, but I updated it to use dxgi1_6.h.

请注意,Windows 成像组件 (WIC) 等大多数“COM”GUID 都在 uuid.lib

更新dxguid.lib 中的这个错误已在 Windows 10 SDK (20348), version 2104 中修复。