高级软件工程09VC与COM、CORBA与COM比较.pptVIP

  • 1
  • 0
  • 约4.09千字
  • 约 27页
  • 2017-12-23 发布于上海
  • 举报

高级软件工程09VC与COM、CORBA与COM比较.ppt

高级软件工程09VC与COM、CORBA与COM比较

* 6、COM与类库 (1)类库的作用 (2)MFC (3)ATL (4)IDE COM与类库 直接利用 C++语言开发 COM 程序 需要处理许多重复性工作 例如 IUnknown 接口的实现 类厂的实现 DLL程序入口函数 等 建立一套标准的类库非常有意义 VC++提供了两套这样的类库: MFC库 ATL库 (1)类库的作用 COM与类库 (2)MFC 基本思路: 采用内嵌接口类成员的方式实现多接口COM对象 未采用多重继承方式 实现方式: CCmdTarget提供COM对象实现的所有支持 利用接口映射表实现任意多个接口 COleObjectFactory实现通用类厂 COM与类库 #define DECLARE_INTERFACE_MAP() \ private: \ static const AFX_INTERFACEMAP_ENTRY _interfaceEntries[]; \ protected: \ static AFX_DATA const AFX_INTERFACEMAP interfaceMap; \ static const AFX_INTERFACEMAP* PASCAL _GetBaseInterfaceMap(); \ virtual const AFX_INTERFACEMAP* GetInterfaceMap() const; \ CCmdTarget定义的接口映射表(afxwin.h) COM与类库 struct AFX_INTERFACEMAP_ENTRY { const void* piid; // the interface id (IID) (NULL for aggregate) size_t nOffset; // offset of the interface vtable from m_unknown }; struct AFX_INTERFACEMAP { const AFX_INTERFACEMAP* (PASCAL * pfnGetBaseMap)(); //NULL is root class const AFX_INTERFACEMAP_ENTRY* pEntry; // map for this class }; 宏定义中用到的数据结构(afxwin.h) COM与类库 #define BEGIN_INTERFACE_MAP(theClass, theBase) \ const AFX_INTERFACEMAP* PASCAL theClass::_GetBaseInterfaceMap() \ { return theBase::interfaceMap; } \ const AFX_INTERFACEMAP* theClass::GetInterfaceMap() const \ { return theClass::interfaceMap; } \ AFX_COMDAT const AFX_DATADEF AFX_INTERFACEMAP theClass::interfaceMap = \ { theClass::_GetBaseInterfaceMap, theClass::_interfaceEntries[0], }; \ AFX_COMDAT const AFX_DATADEF AFX_INTERFACEMAP_ENTRY theClass::_interfaceEntries[] = \ { \ #define INTERFACE_PART(theClass, iid, localClass) \ { iid, offsetof(theClass, m_x##localClass) }, \ #define END_INTERFACE_MAP() \ { NULL, (size_t)-1 } \ }; \ 接口映射表的进一步定义(afxdisp.h) COM与类库 BEGIN_INTERFACE_MAP(COMPONENT, CCmdTarget) INTERFACE_PART(COMPONENT, IID_IX, IX) INTERFACE_PART(COMPONENT, IID_IY, IY) END_INTERFACE_MAP() 接口映射表的使用方法: COM与类库 COleObjectFactory实现通用类厂 COleObjectFactory是一个通用的类厂 从CCmdTarget派生 并实现了IClassFactory2接口 定义内嵌的类厂对象: #def

文档评论(0)

1亿VIP精品文档

相关文档