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

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

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高级软件工程(VC与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接口 定义内嵌的类厂对象:

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档