Direct3DCreate9Ex 函式 (d3d9.h)

建立 IDirect3D9Ex 物件,並將介面傳回給它。

語法

HRESULT Direct3DCreate9Ex(
  [in]  UINT         SDKVersion,
  [out] IDirect3D9Ex **unnamedParam2
);

參數

[in] SDKVersion

類型: UINT

此參數的值應該 D3D_SDK_VERSION。 請參閱<備註>。

[out] unnamedParam2

類型: IDirect3D9Ex**

IDirect3D9Ex介面指標的位址,代表所建立的IDirect3D9Ex物件。 如果函式失敗, 則會 在此插入 Null。

傳回值

類型: HRESULT

  • D3DERR_NOTAVAILABLE 如果不支援 Direct3DEx 功能, (未安裝 WDDM 驅動程式) 或 SDKVersion 不符合 DLL 的版本。
  • 建立 列舉值物件時,如果偵測到記憶體不足狀況,D3DERR_OUTOFMEMORY。
  • 如果 列舉值物件的建立成功,S_OK。

備註

IDirect3D9Ex物件是應用程式建立的第一個物件,以及應用程式發行的最後一個物件。 列舉和擷取裝置功能的函式可透過 IDirect3D9Ex 物件存取。 這可讓應用程式在不建立裝置的情況下選取裝置。

IDirect3D9Ex介面支援列舉使用中的顯示配接器,並允許建立IDirect3D9Ex物件。 如果使用者透過將裝置新增至桌面或熱停駐膝上型電腦) 來動態新增介面卡 (,這些裝置就不會包含在列舉中。 建立新的 IDirect3D9Ex 介面將會公開新的裝置。

D3D_SDK_VERSION 旗標傳遞至此函式,以確保在編譯的應用程式中使用的標頭檔符合已安裝執行時間 DLL 的版本。 只有在 標頭或其他程式碼變更需要重建應用程式時,才會在執行時間中變更D3D_SDK_VERSION。 如果此函式失敗,表示標頭檔的版本和執行時間 DLL 不相符。

注意Direct3DCreate9Ex 僅支援 Windows Vista、Windows Server 2008 和 Windows 7。 舊版的 D3D9.dll 程式庫不包含 Direct3D9ExDirect3DCreate9Ex
 

範例

建立 IDirect3D9Ex 物件。

下列程式碼範例示範如何使用Direct3DCreate9Ex建立IDirect3D9Ex物件。 此範例接著會使用 IDirect3D9Ex 物件來建立 IDirect3DDevice9Ex 物件,該物件會以 out 參數的形式傳回給函式。

HRESULT InitD3D9Ex( /* IN */ HWND hWnd, /* OUT */ IDirect3DDevice9Ex ** ppD3DDevice )
{
    HRESULT hr = E_FAIL;
    IDirect3D9Ex * pD3D = NULL;
    IDirect3DDevice9Ex * pDevice = NULL;

    if(ppD3DDevice == NULL)
    {
        return hr;
    }
    
    // Create the D3D object, which is needed to create the D3DDevice.
    if(FAILED(hr = Direct3DCreate9Ex( D3D_SDK_VERSION, &pD3D )))
    {
        *ppD3DDevice = NULL;
        return hr;
    }
        
        
    // Set up the structure used to create the D3DDevice. 
    D3DPRESENT_PARAMETERS d3dpp; 
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

    // Create the Direct3D device. 
    if( FAILED( hr = pD3D->CreateDeviceEx( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, NULL, &pDevice ) ) )

    {
        *ppD3DDevice = NULL;
        return hr;
    }

    // Device state would normally be set here

    *ppD3DDevice = pDevice;

    return hr;
}

檢查 Direct3D9Ex。

下列程式碼範例示範如何檢查 Direct3DCreate9Ex 是否存在,並在不支援它的平臺上失敗。 您可以在遊戲啟動器中使用此程式碼向使用者顯示錯誤訊息,或改為載入使用 IDirect3D9 介面的轉譯器。

若要檢查 Direct3DCreate9Ex,此範例會使用 Win32 LoadLibrary 函式明確載入 D3D9.dll 程式庫。 接著,此範例會使用 Win32 GetProcAddress函式,將Direct3DCreate9Ex的位址指派給指標。 如果Direct3DCreate9Ex不存在,則函式指標為Null,而程式碼範例會傳回ERROR_NOT_SUPPORTED HRESULT值。 不過,如果 Direct3DCreate9Ex 存在,它會傳回 S_OK 值。

HRESULT CheckD3D9Ex( void )
{
    HRESULT hr = E_FAIL;
    HMODULE libHandle = NULL;

    // Manually load the d3d9.dll library.
    libHandle = LoadLibrary(L"d3d9.dll");

    if(libHandle != NULL)
    {
        // Define a function pointer to the Direct3DCreate9Ex function.
        typedef HRESULT (WINAPI *LPDIRECT3DCREATE9EX)( UINT, void **);

        // Obtain the address of the Direct3DCreate9Ex function. 
        LPDIRECT3DCREATE9EX Direct3DCreate9ExPtr = NULL;
            
        Direct3DCreate9ExPtr = (LPDIRECT3DCREATE9EX)GetProcAddress( libHandle, "Direct3DCreate9Ex" );

        if ( Direct3DCreate9ExPtr != NULL)
        {
            // Direct3DCreate9Ex is supported.
            hr = S_OK;
        }
        else
        {
            // Direct3DCreate9Ex is not supported on this
            // operating system.
            hr = ERROR_NOT_SUPPORTED;
        }

        // Free the library.
        FreeLibrary( libHandle );

    }

    
    return hr;
}

請注意,您可能會將 IDirect3DDevice9Ex 介面指標轉換成 IDirect3DDevice9 介面指標,因為延伸版本是繼承的。 這可讓您搭配現有的 Direct3D 9 程式碼使用擴充裝置,但新裝置變更介面的語意除外。 如需兩個介面之間差異的詳細資訊,請參閱 裝置行為變更

需求

   
目標平台 Windows
標頭 d3d9.h
程式庫 D3d9.lib
Dll D3d9.dll

另請參閱

Direct3D 函式