高级软件工程09(VC与COM、CORBA与COM比较).ppt_第1页
高级软件工程09(VC与COM、CORBA与COM比较).ppt_第2页
高级软件工程09(VC与COM、CORBA与COM比较).ppt_第3页
高级软件工程09(VC与COM、CORBA与COM比较).ppt_第4页
高级软件工程09(VC与COM、CORBA与COM比较).ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、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

2、,#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定义的接口映射表(

3、afxwin.h),COM与类库,5,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_EN

4、TRY* 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) IN

5、TERFACE_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

6、对象提供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,

7、 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, NU

8、LL, 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) &C

9、LSID_NULL, class:UpdateRegistry, NULL, NULL, NULL, 0, NULL, class:GetCategoryMap, class:ObjectMain ,COM与类库,12,(4)IDE,VC+ VB PB DELPHI 等,COM与类库,13,七、COM 与 CORBA,1、共同点 2、不同点 3、相互协作 4、相互竞争,COM 与 CORBA,14,1、共同点,都是二进制互操作标准 提供应用集成能力 支持软件复用 支持系统演化 支持分布处理,COM 与 CORBA,15,基本框架类似 CORBA:IDL DII ORB COSS(事务、事件、安

10、全等) 领域 COM:IDL IDispatch COM库 COM+(IIS、MTS、MSMQ等),COM 与 CORBA,16,2、不同点,技术源头 COM:从DDE、OLE等基础上发展 先有现有技术与产品 后提炼模型 CORBA:不同厂商联合制订 先有规范 后开发或改造支持规范的产品,COM 与 CORBA,17,实现方式,COM:COM库函数参与服务器对象的构造 然后客户与服务器直接通信 是操作系统的一部分 CORBA:ORB负责客户与服务器的所有活动 包括服务器对象的建立 客户与服务器的操作 可以是操作系统的一部分 也可以是独立的应用程序,COM 与 CORBA,18,异构平台 COM

11、:主要在Windows、Macintosh上 Solaris也可用 MVS、HP/UX等处于Beta测试阶段 在除了Windows之外的系统上 性能一般 CORBA:不同的ORB对于异构平台的支持不同 多数以支持UNIX为基本目标 在Windows上存在大量ORB产品,COM 与 CORBA,19,支持工具,COM:支持工具多 Visual Studio BC、Delphi Rose SymantecC+ CORBA:支持工具逐步增加 VC Delphi Symantec Java,COM 与 CORBA,20,3、相互协作,(1)微软 参与OMG工作 向ORB厂商提供COM license IONA Expersoft BEA Inprise HP Visual Egde,COM 与 CORBA,21,(2)OMG,规范中规定 COM/CORBA Interworking,COM 与 CORBA,22,23,24,(3)其它厂商提供协作产品,IONA Orbix: Expersoft PowerBroker BEA ObjectBroker Inprise VisiBroker HP ORB Plus Visua

温馨提示

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

评论

0/150

提交评论