所有的D3D接口從COM的IUnknown接口派生的,所以我雖然我會採取一種簡單的途徑釋放D3D對象,並使用這樣的事:問題的D3D和COM
__inline BOOL SafeRelease(IUnknown*& pUnknown)
{
if(pUnknown != NULL && FAILED(pUnknown->Release()))
return FALSE;
pUnknown = NULL;
return TRUE;
}
這不盡管如此,因爲當我嘗試使用它時,編譯器會生成無效的類型轉換錯誤。圍繞它的唯一途徑我能想到的是這樣的:
__inline BOOL SafeRelease(void* pObject)
{
IUnknown* pUnknown = static_cast<IUnknown*>pObject;
if(pUnknown != NULL && FAILED(pUnknown->Release()))
return FALSE;
return TRUE;
}
但後來我失去了一些功能,並且它看起來也(是)非常狡猾。有一個更好的方法嗎?一些作品就像我的第一個例子將是最佳的,但我想避免使用任何宏(如果可能)
問題中的代碼和此響應中的代碼不正確。 IUnknown :: Release()返回一個ULONG,而不是一個HRESULT。 ULONG通常是對象的重新計數。它不是Release()是成功還是失敗的指標。 請參閱IUnknown :: Release()文檔,地址爲http://msdn.microsoft.com/en-us/library/ms682317(VS.85).aspx – Ants
@ants:我只是在處理WinError中的註釋。 h: '// COM函數和方法的返回值是一個HRESULT.' 猜測那麼這就解決了,那麼也謝謝你指出:) – Necrolis