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