近期需要开发一个ATL框架下的控件,按照MSDN中的向导做了个DEMO,但是在添加连接点时发生了一些意外情况,现在记录如下:
1.在类视图中 展开 XXXXLib,选择 _IXXXXXXXEvents 接口,右键菜单->添加->添加方法(M)
2.在向导界面添加函数,如果方法在标准dispatch ID中已经定义,可在完成向导后,手动编辑.idl文件,将相应的id值修改为标准dispatch ID常数。该向导的唯一工作是在idl文件对应位置添加函数声明
3.重新编译工程,或者在解决方案资源管理器中选择idl文件,右键菜单->编译
4.生成或者重新生成 _IXXXXXXXEvents 接口的实现类。因为向导工具的问题很坑,请注意以下红色标注的细节。
- 在类视图选择控件对应类,右键菜单->添加->添加连接点(O),跳出向导界面
- 检查 "从下列来源实现连接点" 选中的是 项目(P),"可用的类型库(T)"下拉列表中显示的是 ”XXXXLib<x.x>“ 信息,而不是 ”嵌入的IDL“,如果为后者,必须选择为前者后执行下一步
- "双击源接口(I)" 中的 "_IXXXXXXXEvents " 将其添加到 “实现连接点”中
- 点击 完成,生成对应的代码
特别必须注意:红色标注的两步骤不能交换必须在"可用的类型库(T)"下拉列表显示为”XXXXLib<x.x>“ 信息时,双击添加"_IXXXXXXXEvents " 才能正确生成代码。否则即使在添加"_IXXXXXXXEvents " 后,将"可用的类型库(T)"下拉列表改为”XXXXLib<x.x>“ 信息,也无法生成正确的代码。你会发现生成的_IXXXXXXXEvents_CP.H文件中没有任何 "Fire_XXXXX"函数。