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