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 不相符。
範例
建立 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 |