将连接点添加到对象

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

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

  • 通过将连接点添加到控件或对象来实现自己的传出事件源。

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

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

向控件或对象添加连接点

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

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

    使用 uuidgen.exe 或 guidgen.exe 实用工具生成 GUID。

  2. 将 dispinterface 添加为项目 .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 文件中的 dispinterface。

    • 对该类型库使用 importlib 指令。

另请参阅

连接点