ATL双接口实例,本人自写代码



ATL(Active Template Library)是Microsoft开发的一种C++库,用于简化COM(Component Object Model)组件的编写。COM是Windows平台下的一种二进制标准,它定义了对象间交互的接口和方法。ATL的双接口是COM编程中的一个重要概念,它结合了IUnknown和IDispatch接口,使得组件既能支持晚绑定(late binding)又能支持早绑定(early binding),为自动化和脚本语言提供了便利。 在COM中,IUnknown接口是所有接口的基础,它提供了AddRef、Release和QueryInterface三个方法,用于对象引用计数和接口查询。IDispatch接口则用于支持自动化和晚绑定,它提供GetIDsOfNames和Invoke两个方法,允许在运行时获取方法和属性的 DISPIDs(Dispatch IDs)并执行它们。 ATL双接口通常通过继承`IDispEventImpl`宏来实现,这个宏会自动处理IDispatch接口的方法。例如,如果我们创建一个名为`MyDualInterface`的双接口,我们可以这样声明: ```cpp class ATL_NO_VTABLE MyDualInterface : public CComObjectRootEx<CComMultiThreadModel>, public CComCoClass<MyDualInterface>, public IDispEventImpl<IDC_DUAL_INTERFACE, MyDualInterface, &LIBID_MyLib, /*MajorVersion*/, /*MinorVersion*/>, public IUnknown { // ... }; ``` 在这个例子中,`IDispEventImpl`接收四个参数:一个接口ID(`IDC_DUAL_INTERFACE`),类实例的类型(`MyDualInterface`),库ID(`LIBID_MyLib`)以及库的版本号。`IUnknown`接口的实现是自动的,我们通常不需要手动处理。 接下来,我们需要实现接口的早绑定部分,即非IDispatch接口的方法。这可以通过继承`IUnknown`或其它基础接口并提供相应方法来完成。例如,如果`MyDualInterface`需要一个`DoSomething`方法,我们可以这样添加: ```cpp BEGIN_INTERFACE_PART(NonDispPart, IMyNonDispInterface) STDMETHOD(DoSomething)(void) = 0; END_INTERFACE_PART(NonDispPart) imple_m_pure MyClass, IMyNonDispInterface, NonDispPart ``` 在这里,`IMyNonDispInterface`是我们自定义的接口,`imple_m_pure`宏用于声明纯虚方法。 测试ATL双接口实例通常包括创建对象,查询接口,调用方法并检查返回结果。你可以通过`CoCreateInstance`函数创建对象,然后使用`QueryInterface`获取所需的接口指针,最后调用接口方法并验证结果。 在实际应用中,ATL双接口常用于创建可自动化控件、Office插件或需要与脚本语言交互的组件。由于双接口同时支持早绑定和晚绑定,因此它可以提高性能,并且兼容各种不同类型的客户端。 ATL双接口是一种强大的工具,它使得COM组件可以方便地与各种客户端进行交互,无论是C++编译时绑定的代码还是脚本语言运行时的绑定。理解并熟练掌握ATL双接口的使用,将极大地提升你在COM编程领域的技能。




















































































































- 1

- zhousmgk2015-10-22东西非常的不错,很有用

- 粉丝: 211
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 操作系统实验指导书(江西农业大学).doc
- 第2章WindowsXP操作系统基础.ppt
- 医院计算机软硬件故障检测维护研究.docx
- 使用C语言实现的MySQL数据库操作接口封装库-提供数据库连接与断开函数-实现增删查改等基本操作-支持多表格数据管理-适用于初学者学习C语言与数据库交互-项目包含简单示例代码-帮助.zip
- 关于 YOLO 目标检测算法的详细介绍
- 基于机器自动修改脚本中IP地址并通过sudo权限执行脚本实现多种网络攻击与防御测试的网络安全实验项目-包含SYNFlood攻击的C语言实现和PythonScapy实现-TCPRST.zip
- YOLO目标检测算法的介绍
- 基于单阶段 SSD 模型实现车辆与行人目标检测
- 基于C语言开发的轻量级frp客户端实现-专为OpenWRT及物联网设备设计的资源优化型内网穿透工具-支持TCP-HTTP-HTTPS-TCPMUX-SOCKS5等多种协议代理-提供.zip
- 多传感器融合、运动规划、SLAM 与目标检测技术概述 多传感器融合结合运动规划、SLAM 及目标检测解析 深度剖析多传感器融合、运动规划、SLAM 和目标检测 多传感器融合、运动规划、SLAM 与目标
- 基于单阶段目标检测模型 SSD 实现车辆与行人检测任务
- 无需标签数据的自监督算法预训练 backbone 用于目标检测任务,性能优于有标签预训练
- 处于实例分割与目标检测二者之间的定边长数任意多边形目标检测技术
- 基于粒子滤波的多雷达多目标检测前跟踪方法 基于粒子滤波的多雷达多目标检测前跟踪研究 基于粒子滤波的多雷达多目标检测前跟踪技术 基于粒子滤波的多雷达多目标检测前跟踪方案 基于粒子滤波的多雷达多目标检测前
- Flet框架实现的文件选择器选择文件类型枚举示例自定义模板
- 自监督目标检测 针对目标检测任务,提出无需标签数据的自监督算法预训练 backbone,检测性能优于有标签的预训练


