【发布时间】:2021-03-02 08:32:11
【问题描述】:
我正在开发 DirectX 11 应用程序,但在创建 IDXGIFactory7 实例时遇到了困难。我找不到 CreateDXGIFactory7() 函数,所以我像这样使用 CreateDXGIFactory2():
IDXGIFactory7* factory;
HRESULT hr = ::CreateDXGIFactory2(DXGI_CREATE_FACTORY_DEBUG, __uuidof(IDXGIFactory7), (void**)&factory);
我遇到的困难是,当尝试在 Visual Studio 2019 中使用图形调试器时,此调用会引发异常。我还尝试了 IDXGIFactory6,它也会引发异常。如果我将其更改为 IDXGIFactory2,它可以工作,我可以使用图形调试器。
此代码使用常规调试器可以正常运行和调试,但不能使用图形调试器。我得到以下异常:
Exception thrown at 0x00007FFAE1513B29 in DirectXTemplated.exe: Microsoft C++ exception: GRFXTool::ToolException at memory location 0x0000004D28BFE010.
我从https://www.3dgep.com/introduction-to-directx-11/ 下载了示例并将其修改为在 QueryRefreshRate() 函数中使用 IDXGIFactory7 和 CreateDXGIFactory2() 而不是 IDXGIFactory。您需要在 main.cpp 的顶部设置 g_EnableVSync = TRUE 以便它创建工厂。这在尝试使用图形调试器时会产生异常。
这是带有 Visual Studio v16.7.6 的 Windows 10 Pro x64 安装。
【问题讨论】:
-
您使用的是哪个 Windows 10 版本?
-
@ChuckWalbourn Windows 10 版本 1909,操作系统版本 18363.1198。
-
您应该将此作为错误提交给Report a Problem...。
-
“抛出异常”是不充分的描述。接下来发生什么?异常是否在 API 调用之外处理或传递?如果处理,
hr是什么?当您不通过DXGI_CREATE_FACTORY_DEBUG时,情况会有所不同吗?最后,您需要在问题系统上尝试的另一种简单解决方法是请求IDXGIFactory,并在收到IDXGIFactory7的接口指针QueryInterface后。 -
@RomanR。未处理异常,调试器不会让您继续。不返回 hr,因此您无法检查它。删除 DXGI_CREATE_FACTORY_DEBUG 并没有改变任何东西。不过,您的最后一个建议确实有效,我将基于此发布解决方案。