Microsoft DirectX 9.0 |
The INonDelegatingUnknown interace is a version of IUnknown that is renamed to enable support for both nondelegating and delegating IUnknown interfaces in the same COM object.
Syntax
interface INonDelegatingUnknown
{
virtual HRESULT NonDelegatingQueryInterface) (REFIID riid, LPVOID *ppv) PURE;
virtual ULONG NonDelegatingAddRef)(void) PURE;
virtual ULONG NonDelegatingRelease)(void) PURE;
};
Remarks
To use INonDelegatingUnknown for multiple inheritance, perform the following steps.
if (riid == IID_IMyInterface) {
return GetInterface((IMyInterface *) this, ppv);
} else {
return CUnknown::NonDelegatingQueryInterface(riid, ppv);
}
To use INonDelegatingUnknown for nested interfaces, perform the following steps:
if (riid == IID_IMyInterface) {
return GetInterface((IMyInterface *) this, ppv);
} else {
return CUnknown::NonDelegatingQueryInterface(riid, ppv);
}
Because you must always pass the outer unknown and an HRESULT to the CUnknown constructor, you can't use a default constructor. You have to make the member variable a pointer to the class and make a new call in your constructor to actually create it.
Override the NonDelegatingQueryInterface with code such as the following:
if (riid == IID_IMyInterface) {
return m_pImplFilter->
NonDelegatingQueryInterface(IID_IMyInterface, ppv);
} else {
return CUnknown::NonDelegatingQueryInterface(riid, ppv);
}
You can have mixed classes that support some interfaces through multiple inheritance and some interfaces through nested classes.
See Also