все интерфейсы D3D являются производными от интерфейса IUnknown в COM, поэтому я решил пойти простым путем для освобождения объектов 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;
}
но затем я теряю некоторую функциональность, и это также выглядит (и является) очень хитрым. Есть лучший способ сделать это? что-то, что работает как мой первый пример, будет оптимальным, хотя я бы хотел избежать использования макросов (если это возможно)