次の方法で共有


オブジェクトへの接続ポイントの追加

ATL チュートリアルでは、接続ポイントをサポートするコントロールを作成する方法、イベントを追加する方法、接続ポイントを実装する方法を示します。 ATL は、 IConnectionPointImpl クラスを持つ接続ポイントを実装します。

接続ポイントを実装するには、次の 2 つの選択肢があります。

  • コントロールまたはオブジェクトに接続ポイントを追加して、独自の送信イベント ソースを実装します。
  • 別のタイプ ライブラリで定義されている接続ポイント インターフェイスを再利用します。

どちらの場合も、 接続ポイントの実装ウィザード はタイプ ライブラリを使用してその作業を行います。

コントロールまたはオブジェクトに接続ポイントを追加する

  1. .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 ユーティリティを使用します。

  2. プロジェクトの[default,source] ファイル内のオブジェクトのコクラスに、.idl インターフェイスとして dispinterface を追加します。 ここでも、コントロールの作成時に接続ポイントのサポートを有効にした場合、ATL コントロール ウィザードによって [default,source] エントリが作成されます。 このエントリを手動で追加するには、太字の行を追加します。

    coclass Buddy
    {
       [default] interface IBuddy;
       [default,source] dispinterface DBuddyEvents;
    };
    

    例については、.idl ATL サンプルの ファイルを参照してください。

  3. クラス ビューを使用して、イベント インターフェイスにメソッドとプロパティを追加します。 クラス ビューでクラスを右クリックし、ショートカット メニューの [追加] をポイントして、[接続ポイントの追加] を選択します。

  4. 接続ポイントの実装ウィザードの [ソース インターフェイス] リスト ボックスで、プロジェクトのインターフェイスを選択します。 コントロールのインターフェイスを選択し、[ OK] を選択すると、次の操作が行われます。

    • イベントの発信呼び出しを行うコードを実装するイベント プロキシ クラスを含むヘッダー ファイルを生成します。
    • 接続ポイント マップにエントリを追加します。

    コンピューター上のすべてのタイプ ライブラリの一覧も表示されます。 別のタイプ ライブラリで見つかったのとまったく同じ送信インターフェイスを実装する場合は、これらの他のタイプ ライブラリのいずれかを使用して接続ポイントを定義します。

別のタイプ ライブラリで定義されている接続ポイント インターフェイスを再利用する

  1. クラス ビューで、BEGIN_COM_MAP マクロを実装するクラスを右クリックし、ショートカット メニューの [追加] をポイントして、[接続ポイントの追加] を選択します。

  2. 接続ポイントの実装ウィザードで、タイプ ライブラリとタイプ ライブラリのインターフェイスを選択し、[追加] を選択します。

  3. .idl ファイルを次のいずれかに編集します。

    • イベント ソースが使用されているオブジェクトの .idl ファイルから dispinterface をコピーします。
    • そのタイプ ライブラリで importlib 命令を使用します。

関連項目

接続ポイント