簡體   English   中英

使用 IDXGIAdapter 的分段錯誤

[英]Segmentation fault using IDXGIAdapter

我正在閱讀相關的 Microsoft 文檔並找到了如何創建IDGI數據結構然后使用它來讀取 memory 大小的示例,但我遇到了Segmentation fault

#include <iostream>
#include <d3d9.h>
#include <D3D9Types.h>

LPDIRECT3D9       g_pDirect3D = NULL;
LPDIRECT3DDEVICE9 g_pDirect3D_Device = NULL;


int main(void)
{
    UINT x = 0; // Ordinal number that denotes the display adapter. 
    DWORD xWord = 0 ; 
    D3DADAPTER_IDENTIFIER9 pIdentifier ;
    g_pDirect3D = Direct3DCreate9(D3D_SDK_VERSION);

    HRESULT hResult = g_pDirect3D->GetAdapterIdentifier(x, xWord, &pIdentifier);
    IDXGIDevice * pDXGIDevice;
    HRESULT hr  = g_pDirect3D->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice);
    IDXGIAdapter * pDXGIAdapter;
    
    pDXGIDevice->GetAdapter(&pDXGIAdapter); // segfault at this line

    return 0;
}

每件事都很完美,但是當我取消注釋return 0; 我得到錯誤

Microsoft Basic Render Driver
Segmentation fault

為什么我會收到那個錯誤

您無法使用 QueryInterface 從IDirect3D9引用獲取IDXGIDevice引用。

從 QueryInterface 調用返回的HRESULT可能是0x80004002 ( E_NOINTERFACE ),因此pDXGIDevice是 null 並且以下調用會導致崩潰。 您應該始終檢查 HRESULT 值。

否則,對於新的開發,您應該忘記 DirectX9 並使用 DirectX11 或 DirectX12(這將啟用DXGI )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM