通过ATL开发COM概述

来源:互联网 发布:复杂网络上的博弈 编辑:程序博客网 时间:2024/06/05 20:22
ATL 是为了减轻程序员开发COM的负担而提供的一套模板库
ATL提供的支持:
1. CComModule封装对组件的宿主支持,掩盖了(DLL和EXE)之间的差别。
2. 对IUnknown的支持
3. 对类工厂的支持
4. 自动化 : IDispatchImpl
COM 数据类型 : CComBSTR, CComVariant
接口指针 : CComPtr, CComQIPtr
错误处理 :ISupportErrorInfoImpl, CComObject
连接点 : IConnectionPointContainerImpl, IConnectionPointImpl :支持服务器的回叫信号(callback)或事件(event)
异步属性下载 : CBindStatusCallback
自注册 :
视窗和对话框 : Cwindow, CwindowImpl, CDialogImpl, CmessageMap


每个COM组件需要实现这三个功能
1. 实现IUnknown接口 (通过 CComObjectRootEx 实现)
2. 实现一个类工厂,支持组件的创建 (通过 CComCoClass 实现)
3. 实现自注册

一个典型ATL COM组件的定义
[cpp] view plaincopyprint?
  1. class ATL_NO_VTABLE CAtlMath :  
  2.     public CComObjectRootEx<CComSingleThreadModel>,  
  3.     public CComCoClass<CAtlMath, &CLSID_AtlMath>,  
  4.     public IDispatchImpl<IAtlMath, &IID_IAtlMath, &LIBID_ATL_ServerLib, /*wMajor =*/ 1, /*wMinor =*/ 0>  
  5. {//......  
  6. }  
 
CComObjectRootEx 提供 IUnknown支持
CComCoClass 提供类工厂的支持
原创粉丝点击