COM インターフェース

提供: RAD Studio
移動先: 案内検索

COM の基礎:インデックス への移動

COM クライアントは,COM インターフェースを介してオブジェクトと通信します。インターフェースは,サービスの提供者(サーバーオブジェクト)とそのクライアントとの間の通信を提供する,論理的または意味的に関連したルーチンのグループです。COM インターフェースを表す標準的な方法を次の図に示します。

A COM Interface

たとえば,各 COM オブジェクトは,基本的なインターフェース IUnknown を実装しなければなりません。IUnknown 内の QueryInterface というルーチンによって,クライアントは,サーバーが実装するその他のインターフェースを要求できます。

オブジェクトは複数のインターフェースを持つことができ,各インターフェースがそれぞれ 1 つの機能を実装します。インターフェースは,オブジェクトがサービスをどこでどのようにして提供するかという実装の詳細を知らせずに,どのようなサービスを提供するかをクライアントに知らせる手段を提供します。

COM インターフェースの主な特徴は以下のとおりです。

  • いったん公開されたインターフェースは不変です。インターフェースは,特定の機能のセットを提供することを保証します。追加の機能はインターフェースの追加によって提供されます。
  • 規則により,COM インターフェース識別子は大文字の I(アイ)で始まり,その後にインターフェースを定義するシンボル名が続きます(例:IMallocIPersist など)。
  • インターフェースは,グローバルユニーク識別子(GUID: Globally Unique Identifier)と呼ばれるユニークな識別子を持つことが保証されています。GUID はランダムに生成される 128 ビットの数値です。インターフェースの GUID はインターフェース識別子(IID: Interface Identifier)と呼ばれます。IID によって,同一製品の異なるバージョン間や異なる製品間での名前の競合が避けられます。
  • インターフェースは言語に依存しません。COM インターフェースの実装には,ポインタの構造をサポートしていて,ポインタを通じて明示的または暗黙に関数を呼び出すことのできる言語であれば,どのような言語でも使用できます。
  • インターフェース自体はオブジェクトではなく,オブジェクトにアクセスする手段を提供するものです。したがって,クライアントはデータに直接アクセスするわけではなく,インターフェースポインタを介してデータにアクセスします。Windows 2000 にはインターセプタという間接層が追加され,この層を通して即時アクティブ化,オブジェクトプーリングといった COM+ 機能を提供しています。
  • インターフェースは,常に基本インターフェース IUnknown から継承されます。
  • スレッド間,プロセス間,およびネットワーク化されたマシンの間でインターフェースメソッド呼び出しを行えるようにするために,プロキシを通じてインターフェースが COM によってリダイレクトされるようにすることができます(クライアントまたはサーバーオブジェクトがこのリダイレクトに気付くことはありません)。インプロセスサーバーとアウトオブプロセスサーバーの一般的情報については,「インプロセス,アウトオブジェクトプロセス,およびリモートサーバー」を参照してください。

関連項目