ディスパッチ インターフェイス

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

オートメーション インターフェイス への移動


オートメーション コントローラは、COM の IDispatch インターフェイスを使用して COM サーバー オブジェクトにアクセスするクライアントです。コントローラは、まずオブジェクトを作成したあと、そのオブジェクトの IUnknown インターフェイスに対して IDispatch インターフェイスのポインタを問い合わせる必要があります。IDispatch では、インターフェイス メンバの一意識別番号であるディスパッチ識別子(dispID)を使って、メソッドやプロパティを内部的に追跡します。IDispatch を通じて、コントローラは、ディスパッチ インターフェイス用のオブジェクトの型情報を取得したあと、インターフェイス メンバ名を特定の dispID にマッピングします。これらの dispID は実行時に得られるもので、コントローラでは、IDispatch のメソッド GetIDsOfNames を呼び出してそれらの ID を取得します。

dispID をいったん特定したら、コントローラは、IDispatch のメソッド Invoke を呼び出して適切なコード(プロパティまたはメソッド)を実行できます。その際に、そのプロパティまたはメソッドのパラメータを Invoke のパラメータの 1 つにパッケージ化します。Invoke には、固定したコンパイル時シグネチャがあるので、インターフェイス メソッドの呼び出し時に引数をいくつでも受け取ることができます。

オートメーション オブジェクトでの Invoke の実装では、パラメータのパッケージを解凍し、プロパティまたはメソッドを呼び出し、エラーが発生した場合の処理に備える必要があります。プロパティまたはメソッドから制御が返ったら、オブジェクトはその戻り値をコントローラに返します。

コントローラがコンパイル時ではなく実行時にプロパティまたはメソッドにバインドされるので、これを遅延バインディングと呼びます。