ADSI拡張機能を使用したCOM集計規則の再確認
COM集計とADSI拡張規則の概要を次に示します。
CreateInstanceメソッドは、次のように、アグリゲーターへの関数呼び出しを委任しないIUnknownインターフェイスへのポインターを返します。
IUnknown::QueryInterfaceメソッドは、サポートされているインターフェイスへのポインターと、サポートされていないインターフェイスのエラーを返します。
IUnknown::AddRefメソッドは、集計された拡張機能オブジェクト自体の参照カウントをインクリメントします。
IUnkown::Releaseメソッドは、集計された拡張機能オブジェクト自体の参照カウントをデクリメントし、参照カウントが0の場合はそれ自体を破棄します。
拡張オブジェクトは、CreateInstanceメソッドの実装中に、m_pOuterUnknownなどのアグリゲーターのIUnknownポインターを格納する必要があります。
IADsExtensionを含む拡張オブジェクトがサポートするすべてのインターフェイスは、すべての関数呼び出しをアグリゲーターにデリゲートするIUnknownから継承する必要があります。
- IUnknown :: QueryInterface が"m_pOuterUnknown->QueryInterface"を呼び出します
- IUnknown :: AddRef が"m_pOuterUnknown->AddRef"を呼び出します
- IUnkown::Release は "m_pOuterUnknown-Release>" を呼び出します
拡張機能の作成者は、標準のCOM集計規則に従っている限り、任意の内部実装を選択できます。 拡張オブジェクトは、スタンドアロンオブジェクトとして動作する必要はないことに注意してください。 拡張機能は、集計として機能するように設計されています。 ただし、拡張機能は、スタンドアロンオブジェクトと集計の両方として機能するように記述できます。
拡張オブジェクトは、標準のCOM集計のサポートに加えて、より高度な機能のIADsExtensionをサポートする場合があります。 遅延バインディングがサポートされている場合、拡張機能は次のようになります。
- IDispatchの関数をアグリゲーターにデリゲートします。
- IADsExtensionにIDispatchインターフェイスを実装します。