ATL 教程演示如何创建支持连接点的控件、如何添加事件,以及如何实现连接点。 ATL 使用 IConnectionPointImpl
类实现连接点。
若要实现连接点,有两个选项:
- 通过将连接点添加到控件或对象来实现自己的传出事件源。
- 重用在另一类型库中定义的连接点接口。
在任一情况下, 实现连接点向导 都使用类型库来执行其工作。
将连接点添加到控件或对象
在
.idl
文件的库块中定义调度接口。 如果在使用 ATL 控件向导创建控件时启用了对连接点的支持,则会创建 dispinterface。 如果在创建控件时未启用对连接点的支持,则必须手动向.idl
文件添加 dispinterface。 下面是一个 disinterface 示例: 传出接口不需要是调度接口,但许多脚本语言(如 VBScript 和 JScript)都有此要求,因此此示例使用两个 dispinterface:[ uuid(3233E37D-BCC0-4871-B277-48AE6B61224A), helpstring("Buddy Events") ] dispinterface DBuddyEvents { properties: methods: };
使用
uuidgen.exe
或guidgen.exe
工具来生成 GUID。在项目
.idl
文件中,将调度接口添加为对象 coclass 的[default,source]
接口。 同样,如果在创建控件时启用了对连接点的支持,ATL 控件向导将创建该[default,source]
条目。 若要手动添加此条目,请添加粗体行:coclass Buddy { [default] interface IBuddy; [default,source] dispinterface DBuddyEvents; };
在Circ ATL 示例中查看
.idl
文件以获取示例。使用 类视图 向事件接口添加方法和属性。 右键单击 类视图中的类,指向快捷菜单上 的“添加” ,然后选择“ 添加连接点”。
在“实现连接点向导”的“源接口”列表框中,选择项目的接口。 如果选择控件的接口并选择“ 确定”,则:
- 使用事件代理类生成头文件,该类实现将发出事件的传出调用的代码。
- 向连接点映射添加一个条目。
你还将看到计算机上所有类型库的列表。 如果要实现在另一类型库中找到的完全相同的传出接口,则仅使用这些其他类型库之一来定义连接点。
重用在另一类型库中定义的连接点接口
在 类视图中,右键单击实现
BEGIN_COM_MAP
宏的类,指向快捷菜单上的 “添加 ”,然后选择“ 添加连接点”。在 “实现连接点向导”中,选择类型库和类型库中的接口,然后选择“ 添加”。
将
.idl
文件编辑为以下任一项:- 从
.idl
文件中复制正在使用其事件源的对象的调度接口。 - 对该类型库使用 importlib 指令。
- 从