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组件的定义
CComObjectRootEx 提供 IUnknown支持
CComCoClass 提供类工厂的支持
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组件的定义
- class ATL_NO_VTABLE CAtlMath :
- public CComObjectRootEx<CComSingleThreadModel>,
- public CComCoClass<CAtlMath, &CLSID_AtlMath>,
- public IDispatchImpl<IAtlMath, &IID_IAtlMath, &LIBID_ATL_ServerLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
- {//......
- }
CComObjectRootEx 提供 IUnknown支持
CComCoClass 提供类工厂的支持