COM原理及组件开发.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
COM原理及组件开发

聚合可看作是包含的一个特例,聚合更好地体现了复用 虽然对象A直接向对象B的客户提供服务,但对象B的客户感觉不到对象A的存在,对象A的生存期受到对象B的控制 实现聚合的关键在于QueryInterface 当客户向对象B请求IX时,对象B的QueryInterface返回对象A的IX指针 存在问题: (1)从IX如何得到IY? (2)从IX得到的Iunknown如何与从IY得到的IUnknown 相同? 聚合 (Aggregation) 包含的复用性建立在客户/服务器模式上,而聚合的复用性需要内部构件提供支持 复用方式的选择: 当内部构件提供的接口完全满足要求时,使用聚合合适 当内部构件提供的接口与需求类似时,使用包含合适 在一个对象中可以同时使用两种复用方式 包含与聚合的使用 自动化是允许高级语言使用构件的COM应用技术,自动化的核心是IDispatch接口,自动化对象就是实现了IDispatch接口的COM对象 IDispatch接口是自动化对象必须实现的接口, IDispatch在IUnkown接口的基础上增加了如下操作 GetIDsOfNames 操作负责返回操作或属性及其参数名字的分发标识符(分发ID,即DISPID:用于管理属性和操作) GetTypeInfo 处理对象类型信息 GetTypeInfoCount 处理对象类型信息 Invoke 是IDispatch的核心操作,根据分发ID执行相应函数 COM的动态激活机制-自动化 COM的动态激活机制-自动化 构件 客户机 IDispatch指针 对象 Vtable指针 IDispatch Vtable Invoke Invoke(DISP d,…) { Switch(d){ Case 1: Method1(); Case 2: Method2() Method2() {…} Method1() {…} Invoke操作和分发ID机制使得运行时动态绑定属性和方法成为可能,但灵活性的代价是效率的降低。如果将DISP硬编码在应用中而不是频繁调用GetIDsofNames(即早绑定),情况也许会更好,IDL中用disinterface支持该类情况 对象描述语言ODL是对IDL的扩充,用来描述COM对象的类型信息,包括接口的类型信息(interface或disinterface)和COM对象类的类型信息(用coclass关键字描述) 类型库是IDL文件经过编译后产生的一个资源文件,包含COM服务器中COM对象和接口的信息 IDL用library描述类型库信息,包括类型库的全局唯一标识符(LIBID)、类型库所使用的版本、语言等 COM的动态激活机制-自动化 COM的动态激活机制-自动化 自动化组件可以被脚本语言直接调用,也称为双接口组件 DCOM是COM的进一步扩展,DCOM用网络协议来代替本地进程之间的通信,并针对分布环境提供了一些新的特性,例如:位置透明、网络安全性、跨平台调用等 DCOM的分布特性依靠远程过程调用实现 分布构件对象模型DCOM 客户机 COM运行时环境 安全提供者 DCE RPC 协议栈 COM运行时环境 安全提供者 DCE RPC 协议栈 构件 DCOM网络协议 基于COM组件开发可简要描述为以下几个过程 建立COM组件 基于ATL编程 基于MFC编程(可用于实现自动化组件) 组件的编译 组件的注册 编写客户端程序,调用组件的接口函数 基于COM组件的开发过程 组件程序的编译 说明1:编译后,类型库以 TLB 文件形式单独存在,同时也保存在目标文件的资源中。 #import 引入类型库的时候,既可以指定 TLB 文件,也可以指定目标文件 说明2:IDL 编译后生成代理/存根源程序,有: dlldata.c、xxx_p.c、xxxps.def、xxxps.mak 可以用 NMAKE.EXE 再次编译来产生真正的代理/存根DLL目标文件 组件程序编译过程 组件调用的方法主要分为以下几种: #include方法:IDL编译后,会产生xxx.h和xxx_i.c文件。可直接#include该文件,如: #include “ComTest.h #include “ComTest_i.c“ 如用到CComBSTR,还需要包含:#include atlbase.h #import方法:比较通用的方法,vc 会帮我们产生包装类,如: #import “ComTest.tlb“ 客户端程序-组件调用 #include ComTest.h #include ComTest_i.c ::CoInitialize( NULL )

文档评论(0)

linsspace + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档