INonDelegatingUnknown
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
インターフェイスは INonDelegatingUnknown
IUnknown のバージョンであり、同じ COM オブジェクト内の IUnknown インターフェイスの非削除と委任の両方をサポートできるように名前が変更されています。
構文
interface INonDelegatingUnknown
{
virtual HRESULT NonDelegatingQueryInterface(REFIID riid, LPVOID *ppv) PURE;
virtual ULONG NonDelegatingAddRef(void) PURE;
virtual ULONG NonDelegatingRelease(void) PURE;
};
解説
を複数の継承に使用 INonDelegatingUnknown
するには、次の手順を実行します。
インターフェイス (IMyInterface など) からクラスを派生させます。
クラス定義 にDECLARE_IUNKNOWN を含め、外部不明を呼び出す QueryInterface、 AddRef、 Release の実装を宣言します。
NonDelegatingQueryInterface をオーバーライドして、IMyInterface を次のようなコードで公開します。
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
IMyInterface のメンバー関数を宣言して実装します。
入れ子になったインターフェイスに を使用 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 オブジェクト クラスのメンバーとして宣言します。
外側の不明なコンストラクターと HRESULT を CUnknown コンストラクターに常に渡す必要があるため、既定のコンストラクターを使用することはできません。 メンバー変数を クラスへのポインターにし、コンストラクターで新しい呼び出しを行って実際に作成する必要があります。
NonDelegatingQueryInterface を次のようなコードでオーバーライドします。
if (riid == IID_IMyInterface) {
return m_pImplFilter->
NonDelegatingQueryInterface(IID_IMyInterface, ppv);
} else {
return CUnknown::NonDelegatingQueryInterface(riid, ppv);
}
複数の継承を介して一部のインターフェイスをサポートする混合クラスと、入れ子になったクラスを介した一部のインターフェイスを持つことができます。
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|
関連項目