オブジェクトへのコネクション ポイントの追加
ATL チュートリアルでは、コネクション ポイントをサポートするコントロールの作成方法、イベントの追加方法、およびコネクション ポイントの実装方法の例を示します。ATL は、IConnectionPointImpl クラスを使用してコネクション ポイントを実装します。
コネクション ポイントを実装するには、2 つの方法があります。
コントロールまたはオブジェクトにコネクション ポイントを追加することにより、独自のアウトゴーイング イベント ソースを実装します。
別のタイプ ライブラリで定義されているコネクション ポイント インターフェイスを再利用します。
どちらの場合も、接続ポイントの実装ウィザードはタイプ ライブラリを使用して作業を行います。
コントロールまたはオブジェクトにコネクション ポイントを追加するには
.idl ファイルのライブラリ ブロックにディスパッチ インターフェイスを定義します。ATL コントロール ウィザードでコントロールを作成したときにコネクション ポイントのサポートを有効にした場合、ディスパッチ インターフェイスは既に作成されています。コントロールの作成時にコネクション ポイントのサポートを有効にしなかった場合は、ディスパッチ インターフェイスを .idl ファイルに手動で追加する必要があります。次にディスパッチ インターフェイスの例を示します。アウトゴーイング インターフェイスはディスパッチ インターフェイスにする必要はありませんが、VBScript や JScript などの多くのスクリプト言語ではこれが要求されるため、この例では 2 つのディスパッチ インターフェイスを使用します。
[ uuid(3233E37D-BCC0-4871-B277-48AE6B61224A), helpstring("Buddy Events") ] dispinterface DBuddyEvents { properties: methods: };
uuidgen.exe ユーティリティまたは guidgen.exe ユーティリティを使用して GUID を生成します。
プロジェクトの .idl ファイル内のオブジェクトのコクラスに、ディスパッチ インターフェイスを [default,source] インターフェイスとして追加します。また、コントロールの作成時にコネクション ポイントのサポートを有効にした場合は、ATL コントロール ウィザードの [default,source] エントリが作成されます。このエントリを手動で追加するには、次に示す太字の行を追加します。
coclass Buddy { [default] interface IBuddy; [default,source] dispinterface DBuddyEvents; };
例については、Circ ATL サンプルの .idl ファイルを参照してください。
[クラス ビュー] を使用して、イベント インターフェイスにメソッドとプロパティを追加します。[クラス ビュー] でクラスを右クリックし、ショートカット メニューの [追加] をポイントし、[接続ポイントの追加] をクリックします。
接続ポイントの実装ウィザードの [ソース インターフェイス] ボックスで、インターフェイスを選択します。コントロールのインターフェイスを選択して [完了] をクリックした場合は、次の処理を行います。
ヘッダー ファイルを生成し、イベントに対するアウトゴーイング インターフェイス呼び出しコードをイベント プロキシ クラスで実装します。
コネクション ポイント マップにエントリを追加します。
コンピューターにあるすべてのタイプ ライブラリの一覧も表示されます。別のタイプ ライブラリで見つかった同一のアウトゴーイング インターフェイスを実装する場合は、ほかのタイプ ライブラリの 1 つだけを使用してコネクション ポイントを定義する必要があります。
別のタイプ ライブラリで定義されているコネクション ポイント インターフェイスを再利用するには
[クラス ビュー] で、BEGIN_COM_MAP マクロを実装するクラスを右クリックし、ショートカット メニューの [追加] をポイントし、[接続ポイントの追加] をクリックします。
接続ポイントの実装ウィザードで、タイプ ライブラリとタイプ ライブラリ内のインターフェイスを選択し、[追加] をクリックします。
.idl ファイルを編集して、次のいずれかを行います。
イベント ソースが使用されているオブジェクトの .idl ファイルからディスパッチ インターフェイスをコピーします。
そのタイプ ライブラリに対して importlib 命令を使用します。