INonDelegatingUnknown
INonDelegatingUnknown インターフェイスは、同じ COM オブジェクトの非委任および委任 IUnknown インターフェイスの両方のサポートを有効にするために名前を変更した IUnknown のバージョンである。
構文
interface INonDelegatingUnknown
{
virtual HRESULT NonDelegatingQueryInterface) (REFIID riid, LPVOID *ppv) PURE;
virtual ULONG NonDelegatingAddRef)(void) PURE;
virtual ULONG NonDelegatingRelease)(void) PURE;
};
注意
複数の継承に対して INonDelegatingUnknown を使うには、次のステップを実行する。
インターフェイス (IMyInterface など) からクラスを派生する。
外部 unknown を呼び出す QueryInterface、AddRef、および Release の実装を宣言するため、クラス定義に DECLARE_IUNKNOWN をインクルードする。
NonDelegatingQueryInterface をオーバーライドし、次のようなコードを使って IMyInterface を公開する。
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
MyInterface のメンバ関数を宣言し、実装する。
ネストしたインターフェイスで INonDelegatingUnknown を使うには、次のステップを実行する。
CUnknown から派生したクラスを宣言する。
クラス定義に DECLARE_IUNKNOWN をインクルードする。
NonDelegatingQueryInterface をオーバーライドし、次のようなコードを使って IMyInterface を公開する。
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
IMyInterface のメンバ関数を実装する。CUnknown::GetOwner を使って、COM オブジェクト クラスにアクセスする。
COM オブジェクト クラスで、ネストしたクラスを COM オブジェクト クラスのフレンドとし、ネストしたクラスのインスタンスを COM オブジェクト クラスのメンバとして宣言する。
外部 unknown と HRESULT は必ず CUnknown コンストラクタに渡さなければならないので、デフォルトのコンストラクタは使えない。メンバ変数をクラスへのポインタとし、コンストラクタで新しい呼び出しを行って、実際に作成する必要がある。
次のようなコードを使って、NonDelegatingQueryInterface をオーバーライドする。
if (riid == IID_IMyInterface) {
return m_pImplFilter->
NonDelegatingQueryInterface(IID_IMyInterface, ppv);
} else {
return CUnknown::NonDelegatingQueryInterface(riid, ppv);
}
複数の継承およびネストしたクラスによって、一部のインターフェイスをサポートする混合クラスを持つことができる。
参照