将连接点添加到对象
ATL 教程演示如何创建支持连接点的控件、如何添加事件,以及如何实现连接点。 ATL 使用 IConnectionPointImpl 类实现连接点。
若要实现连接点,有两个选项:
通过将连接点添加到控件或对象来实现自己的传出事件源。
重用在另一类型库中定义的连接点接口。
在任一情况下,实现连接点向导都使用类型库来执行其工作。
向控件或对象添加连接点
在 .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。
将 dispinterface 添加为项目 .idl 文件中对象的 coclass 中的
[default,source]
接口。 同样,如果在创建控件时启用了对连接点的支持,ATL 控件向导将创建[default,source
] 条目。 若要手动添加此条目,请添加粗体行:coclass Buddy { [default] interface IBuddy; [default,source] dispinterface DBuddyEvents; };
有关示例,请参阅 Circ ATL 示例中的 .idl 文件。
使用类视图向事件接口添加方法和属性。 右键单击类视图中的类,指向快捷菜单上的“添加”,然后单击“添加连接点”。
在“实现连接点向导”的 “源接口”列表框中,选择“项目”的接口。 如果选择控件的接口并按“确定”,你将:
使用事件代理类生成头文件,该类实现将发出事件的传出调用的代码。
向连接点映射添加一个条目。
还将看到计算机上所有类型库的列表。 如果要实现在另一类型库中找到的完全相同的传出接口,应仅使用这些其他类型库之一来定义连接点。
重用在另一类型库中定义的连接点接口
在类视图中,右键单击实现 BEGIN_COM_MAP 宏的类,指向快捷菜单上的 “添加”,然后单击“添加连接点”。
在“实现连接点向导”中,选择类型库和类型库中的接口,然后单击“添加”。
编辑 .idl 文件以便:
为正在使用其事件源的对象复制 .idl 文件中的 dispinterface。
对该类型库使用 importlib 指令。