高级软件工程(vc与com、corba与com比较)_第1页
高级软件工程(vc与com、corba与com比较)_第2页
高级软件工程(vc与com、corba与com比较)_第3页
高级软件工程(vc与com、corba与com比较)_第4页
高级软件工程(vc与com、corba与com比较)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,6、COM与类库,(1)类库的作用 (2)MFC(3)ATL(4)IDE,COM与类库,2,直接利用 C+语言开发 COM 程序需要处理许多重复性工作例如 IUnknown 接口的实现类厂的实现DLL程序入口函数 等建立一套标准的类库非常有意义VC+提供了两套这样的类库: MFC库ATL库,(1)类库的作用,COM与类库,3,(2)MFC,基本思路:采用内嵌接口类成员的方式实现多接口COM对象 未采用多重继承方式实现方式:CCmdTarget提供COM对象实现的所有支持利用接口映射表实现任意多个接口COleObjectFactory实现通用类厂,COM与类库,4,#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与类库,5,struct AFX_INTERFACEMAP_ENTRYconst void* piid; / the interface id (IID) (NULL for aggregate)size_t nOffset; / offset of the interface vtable from m_unknown;struct AFX_INTERFACEMAPconst AFX_INTERFACEMAP* (PASCAL * pfnGetBaseMap)();/NULL is root classconst AFX_INTERFACEMAP_ENTRY* pEntry; / map for this class;,宏定义中用到的数据结构(afxwin.h),COM与类库,6,#define BEGIN_INTERFACE_MAP(theClass, theBase) const AFX_INTERFACEMAP* PASCAL theClass:_GetBaseInterfaceMap() return ,接口映射表的进一步定义(afxdisp.h),COM与类库,7,BEGIN_INTERFACE_MAP(COMPONENT, CCmdTarget)INTERFACE_PART(COMPONENT, IID_IX, IX)INTERFACE_PART(COMPONENT, IID_IY, IY)END_INTERFACE_MAP(),接口映射表的使用方法:,COM与类库,8,COleObjectFactory实现通用类厂,COleObjectFactory是一个通用的类厂从CCmdTarget派生并实现了IClassFactory2接口定义内嵌的类厂对象:#define DECLARE_OLECREATE(class_name) public: static AFX_DATA COleObjectFactory factory; static AFX_DATA const GUID guid; 利用COM对象提供CLSID和运行时刻类型信息完成对象的创建工作,COM与类库,9,(3)ATL,基于模板的C+类库用于建立小巧、快速 COM构件程序其内部模板类实现了COM的一些 基本特征:IUnknown、IClassFactory、Idispatch等及高级特征:dual interface、 connection point等使用多重继承的方式实现COM接口,COM与类库,10,定义COM映射表等#define BEGIN_COM_MAP(x) public: typedef x _ComMapClass; static HRESULT WINAPI _Cache(void* pv, REFIID iid, void* ppvObject, DWORD dw)_ComMapClass* p = (_ComMapClass*)pv;p-Lock();HRESULT hRes = CComObjectRootBase:_Cache(pv, iid, ppvObject, dw);p-Unlock();return hRes;.,COM与类库,11,定义对象映射表#define BEGIN_OBJECT_MAP(x) static _ATL_OBJMAP_ENTRY x = #define END_OBJECT_MAP() NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL;#define OBJECT_ENTRY(clsid, class) &clsid, class:UpdateRegistry, class:_ClassFactoryCreatorClass:CreateInstance, class:_CreatorClass:CreateInstance, NULL, 0, class:GetObjectDescription, class:GetCategoryMap, class:ObjectMain ,#define OBJECT_ENTRY_NON_CREATEABLE(class) &CLSID_NULL, class:UpdateRegistry, NULL, NULL, NULL, 0, NULL, class:GetCategoryMap, class:ObjectMain ,COM与类库,12,(4)IDE,VC+VBPBDELPHI 等,COM与类库,13,七、COM 与 CORBA,1、共同点2、不同点3、相互协作4、相互竞争,COM 与 CORBA,14,1、共同点,都是二进制互操作标准 提供应用集成能力支持软件复用支持系统演化支持分布处理,COM 与 CORBA,15,基本框架类似CORBA:IDLDIIORBCOSS(事务、事件、安全等)领域COM:IDLIDispatchCOM库COM+(IIS、MTS、MSMQ等),COM 与 CORBA,16,2、不同点,技术源头COM:从DDE、OLE等基础上发展先有现有技术与产品后提炼模型CORBA:不同厂商联合制订先有规范后开发或改造支持规范的产品,COM 与 CORBA,17,实现方式,COM:COM库函数参与服务器对象的构造然后客户与服务器直接通信是操作系统的一部分CORBA:ORB负责客户与服务器的所有活动包括服务器对象的建立客户与服务器的操作可以是操作系统的一部分也可以是独立的应用程序,COM 与 CORBA,18,异构平台COM:主要在Windows、Macintosh上Solaris也可用MVS、HP/UX等处于Beta测试阶段在除了Windows之外的系统上性能一般CORBA:不同的ORB对于异构平台的支持不同多数以支持UNIX为基本目标在Windows上存在大量ORB产品,COM 与 CORBA,19,支持工具,COM:支持工具多Visual StudioBC、DelphiRoseSymantecC+CORBA:支持工具逐步增加VC Delphi Symantec Java,COM 与 CORBA,20,3、相互协作,(1)微软参与OMG工作向ORB厂商提供COM licenseIONA ExpersoftBEAInpriseHPVisual Egde,COM 与 CORBA,21,(2)OMG,规范中规定 COM/CORBA Interworking,COM 与 CORBA,22,23,24,(3)其它厂商提供协作产品,IONA Orbix:Expersoft PowerBrokerBEA ObjectBrokerInprise VisiBrokerHP ORB PlusVisu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论