COM インターフェースポインタ

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

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

インターフェースポインタは,オブジェクトのインスタンスを指し示し,それによってさらにインターフェース内の各メソッドの実装を指し示すポインタです。実装へのアクセスには,これらのメソッドへのポインタの配列が使用されます。この配列は vtable(仮想テーブル)呼ばれます。仮想テーブルは,Delphi で仮想関数をサポートするために使用されているメカニズムと類似しています。この類似点があるので,コンパイラは,Delphi クラス上のメソッドの呼び出しの解決と同様に,インターフェース上のメソッドの呼び出しを解決できます。

仮想テーブルは,1 つのオブジェクトクラスのすべてのインスタンスの間で共有されるので,オブジェクトコードは各オブジェクトインスタンスについて,プライベートなデータを入れるための第 2 の構造体を割り当てます。したがって,クライアントのインターフェースポインタは,次の図に示すように,仮想テーブルへのポインタへのポインタです。

Interface vtable

Windows 2000 以降では,オブジェクトが COM+ で動作しているとき,インターフェースポインタと vtable ポインタの間に追加の間接層(インターセプタ)が提供されます。クライアントに示すインターフェースポインタはインターセプタを指し,インターセプタは vtable を指します。これにより,COM+ は即時アクティブ化などのサービスを提供し,クライアントに認識されずにサーバーを動的に起動/停止することができます。これを実現するため,COM+ は,インターセプタが通常の vtable ポインタであるかのように動作させます。

関連項目