コンピュータプログラミングにおいて、IUnknown インターフェイスはコンポーネントオブジェクトモデル(COM)の基本的なインターフェイスです。COM仕様[1]では、COMオブジェクトがこのインターフェイスを実装する必要があると規定されています。さらに、他のすべてのCOMインターフェイスはIUnknownから派生する必要があります。IUnknownは、すべてのCOMオブジェクトの2つの重要な機能、参照カウントによるオブジェクトの有効期間管理と、他のインターフェイスを介したオブジェクト機能へのアクセスを公開します。
IUnknown (または IUnknown 派生) インターフェイスは、インターフェイスで宣言された関数を実装する関数へのポインターのリストをインターフェイスで宣言された順序で含む仮想メソッド テーブルへのポインターで構成されます。したがって、インプロセス呼び出しのオーバーヘッドは、C++ の仮想メソッド呼び出しと同じです。[2]
方法
IUnknownインターフェースは3つのメソッドを公開します: QueryInterface、、AddRefおよびRelease: [3]
QueryInterface呼び出し元がコンポーネントが実装するインターフェイスへの参照を取得できるようにします。これはC++dynamic_cast<>のやJavaおよびC#のキャストに似ています。具体的には、そのインターフェイスを一意に識別するGUID (一般にインターフェイス IDまたはIIDと呼ばれる) を指定して、別のインターフェイスへのポインターを取得するために使用されます。COM オブジェクトがそのインターフェイスを実装していない場合は、代わりに E_NOINTERFACE エラーが返されます。AddRef新しいクライアントがオブジェクトを取得するときに参照カウントを増やすために使用されます。新しい参照カウントを返します。Releaseクライアントがオブジェクトの使用を終了したときに参照カウントを減算するために使用されます。新しい参照カウントを返します。参照カウントがゼロに達すると、オブジェクトはリリース中に自身を削除します。つまり、呼び出し元は Release を呼び出した後、インターフェイスを使用することはできません。
インターフェイスIUnknown {仮想HRESULT QueryInterface ( REFIID riid 、void ** ppvObject ) = 0 ;仮想ULONG AddRef () = 0 ;仮想ULONG Release () = 0 ; };
IUnknownインターフェイス ID は、 {00000000-0000-0000-C000-0000000000046} という値を持つ GUIDとして定義されます。
COM コンポーネントのインターフェイスは、再帰的、対称的、および推移的QueryInterface特性を示す必要があります。再帰的特性とは、インターフェイスの ID を持つ特定のインターフェイスの呼び出しが、インターフェイスの同じインスタンスを返す機能を指します。対称的特性では、インターフェイス B がインターフェイス A から を介して取得される場合QueryInterface、インターフェイス A はインターフェイス B からも取得可能である必要があります。推移的特性では、インターフェイス B がインターフェイス A から取得可能であり、インターフェイス C がインターフェイス B から取得可能である場合、インターフェイス C はインターフェイス A から取得可能である必要があります。
その他
- ActiveXビジュアルコンポーネント標準に従って設計されたコンポーネントは、少なくともIUnknownインターフェイスを実装する必要があります。[4]
- IUnknownはMac OS XのCore Foundation CFPlugInフレームワークの基盤として機能します。[5]
- Mozilla のXPCOMコンポーネント モデルでは、このインターフェイスは nsISupports とも呼ばれます。
参照
- IOleObject - これは、オブジェクトのリンクと埋め込み(OLE) オブジェクトの基本インターフェイスです。
- IDispatch - このインターフェイスは、 OLEオートメーションCOMオブジェクトの名前ベースの動的メソッドディスパッチを提供します。
- IObjectWithSite - この COM インターフェイスにより、親/子のオブジェクトのペアが相互に接続され、ブラウザー ヘルパー オブジェクト(BHO)が実装されます。
- IInspectable - COM 派生のWindows ランタイム(WinRT) は、この IUnknown 派生インターフェイスを基本インターフェイスとして使用します。
参考文献
- ^ コンポーネント オブジェクト モデル仕様、2004 年 2 月 15 日にオリジナルからアーカイブ
- ^ 「コンポーネント オブジェクト モデル」。microsoft.com。Microsoft。2018年 5 月 30 日。2019 年2 月 12 日に閲覧。
- ^ microsoft.com の IUnknown 定義。Wayback Machineで 2013-07-11 にアーカイブ。2008 年 1 月 18 日にアクセス。
- ^ ActiveX コントロール at microsoft.com; 2008 年 1 月 18 日にアクセス
- ^ apple.com のプラグイン; 2011 年 9 月 18 日にアクセス
外部リンク
- プレーンCのCOM
