所有的 D3D 接口都派生自 COM 的 IUnknown 接口,所以我会采取一种简单的方法来释放 D3D 对象并使用类似这样的东西:
__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;
}
但后来我失去了一些功能,它也看起来(并且)非常狡猾。有一个更好的方法吗?像我的第一个示例一样工作的东西将是最佳的,尽管我想避免使用任何宏(如果可能的话)