将连接点添加到对象

ATL 教程演示如何创建支持连接点的控件、如何添加事件,以及如何实现连接点。 ATL 使用 IConnectionPointImpl 类实现连接点。

若要实现连接点,有两个选项:

  • 通过将连接点添加到控件或对象来实现自己的传出事件源。
  • 重用在另一类型库中定义的连接点接口。

在任一情况下, 实现连接点向导 都使用类型库来执行其工作。

将连接点添加到控件或对象

  1. .idl 文件的库块中定义调度接口。 如果在使用 ATL 控件向导创建控件时启用了对连接点的支持,则会创建 dispinterface。 如果在创建控件时未启用对连接点的支持,则必须手动向 .idl 文件添加 dispinterface。 下面是一个 disinterface 示例: 传出接口不需要是调度接口,但许多脚本语言(如 VBScript 和 JScript)都有此要求,因此此示例使用两个 dispinterface:

    [
       uuid(3233E37D-BCC0-4871-B277-48AE6B61224A),
       helpstring("Buddy Events")
    ]
    dispinterface DBuddyEvents
    {
       properties:
       methods:
    };
    

    使用uuidgen.exeguidgen.exe工具来生成 GUID。

  2. 在项目 .idl 文件中,将调度接口添加为对象 coclass 的 [default,source] 接口。 同样,如果在创建控件时启用了对连接点的支持,ATL 控件向导将创建该 [default,source] 条目。 若要手动添加此条目,请添加粗体行:

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

    Circ ATL 示例中查看.idl文件以获取示例。

  3. 使用 类视图 向事件接口添加方法和属性。 右键单击 类视图中的类,指向快捷菜单上 的“添加” ,然后选择“ 添加连接点”。

  4. “实现连接点向导”的“源接口”列表框中,选择项目的接口。 如果选择控件的接口并选择“ 确定”,则:

    • 使用事件代理类生成头文件,该类实现将发出事件的传出调用的代码。
    • 向连接点映射添加一个条目。

    你还将看到计算机上所有类型库的列表。 如果要实现在另一类型库中找到的完全相同的传出接口,则仅使用这些其他类型库之一来定义连接点。

重用在另一类型库中定义的连接点接口

  1. 类视图中,右键单击实现 BEGIN_COM_MAP 宏的类,指向快捷菜单上的 “添加 ”,然后选择“ 添加连接点”。

  2. “实现连接点向导”中,选择类型库和类型库中的接口,然后选择“ 添加”。

  3. .idl 文件编辑为以下任一项:

    • .idl 文件中复制正在使用其事件源的对象的调度接口。
    • 对该类型库使用 importlib 指令。

另请参阅

连接点