所有D3D接口(interface)都是从COM的IUnknown接口(interface)派生的,因此尽管我会采取一种简单的方法来发布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;
}
但是后来我失去了一些功能,而且看起来也很狡猾。有一个更好的方法吗?虽然我想避免使用任何宏(如果可能的话),但与我的第一个示例类似的东西将是最佳的
最佳答案
模板函数可以解决您的问题:
template<class T>
__inline bool SafeRelease(T*& pUnknown)
{
if (pUnknown == NULL) return false;
if (0 == pUnknown->Release())
pUnknown = NULL;
return true;
}
关于c++ - D3D和COM问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2350531/