构件对象模型COM.ppt

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

构件对象模型:COM; 内 容 基础部分 综述 接口 实现 高级部分 包含与聚合 COM与VC 自动化 DCOM ;(1) COM的起源 源于OLE: Object Link and Embedding OLE1 采用DDE(Dynamic Data Exchange) 在不同的程序之间进行通信 DDE缺点: 效率低,稳定性不好,使用不方便 COM是为克服上述不足而出现的 OLE2 以 COM 为基础 但OLE未能体现COM优点 ;(2)什么是COM 构件对象模型:Component Object Model 客户与构件为了能够互操作而遵循的标准 COM标准包括规范与实现两部分 规范部分定义了构件之间的通信机制 这些规范不依赖于任何特定的语言 和操作系统 实现部分即COM库 为COM规范的具体实现提供一些核心服务 ;(3) COM构件;(4) COM库 (COM Library) 功能: (1)实现客户方与服务器方COM应用的创建过程 (2)COM通过注册表查找本地服务器(即EXE程序) 以及程序名与CLSID的转换 (3)提供标准的内存控制方法 DCOM的实现提供了分布式环境下的通信机制 在操作系统层次 以DLL文件的形式存在 ;(5) COM特性 语言无关性 为跨语言合作开发提供了统一标准 并得到不同集成开发环境的支持 进程透明性 进程内服务程序: DLL 本地服务程序: EXE 远地服务程序: DLL或EXE 实现进程透明性的关键是COM库 它负责服务体的定位 管理对象的创建及对象与客户之间的通信 复用性 包含方式 聚合方式;(6) COM发展趋势 操作系统 成为系统的基本软件模型 数据库 OLE DB/ADO 以 COM 的方式 为数据访问提供一致的接口 Internet ActiveX包含了所有基于COM的Internet相关技术 COM+ 增加MTS等服务;2 COM接口;Vtbl指针;Vtbl的作用:提高接口实现的灵活性;两个实例 共享同一Vtbl:; 接口特点 实现级 二进制,独立于编程语言 稳定性 客户与服务器依赖于接口 继承性 便于扩展接口, 不提倡继承 所有接口皆继承Iunknown) 多态性:;(1)功能 提供: 生存期控制 接口查询 IUnknown的定义(IDL): interface IUnkown { virtual HRESULT QueryInterface( const IID, void **ppv) = 0; virtual ULONG AddRef() = 0; virtual ULONG Release() = 0; };Vtbl指针;IUnknown指针的获取 IUnknown * CreateInstance(); 创建构件时,客户可以使用CreateInstance, 而不是new。 CreateInstance的定义: IUnknown * CreateInstance() { IUnknown * pI = static_castIX * (new foo); pI - AddRef(); return pI; } ;(2)引用计数 AddRef与Release 控制构件的生命期 解决内存管理问题 使构件能够自己将自己删除 使用规则 返回接口指针之前调用 AddRef; 使用完接口之后调用Release; 赋值之后调用AddRef;;;(3)接口查询;QueryInterface的实现 假定存在类 CA,继承接口 IX 与 IY: HRESULT _sfdcall CA:: QueryInterface(const IID iid, void ** ppv){ if (iid == IID_IUnknown) { *ppv = static_castIX *(this); } else if (iid == IID_IX) { *ppv = static_castIX *(this); } else if (iid == IID_IY) { *ppv = static_castIY *(this); } else { *ppv = NULL; return E_NOINTERFACE; }

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档