- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
组件技术产生的原因
体现为独立的整体系统,同一团队,同一语言,同一机器,开发过程分析、设计、实现发布前集成了广泛的应用特性,特性不能独立的被删除、升级和替换。难以被复用,版本升级繁琐,必须整体升级
新技术的冲击
面向对象范型不足 使用和实现进一步分离
COM组件规范的内容
用新版本的组件直接替换旧版本的组件有什么影响?(有答案)可参考不变性
没有影响
什么叫客户桩?(有答案)
组件技术的优点
提高开发速度
降低开发成本
提高软件质量
增加软件的灵活性
降低软件的维护费用
COM组件的目标
易于动态组装
组件实现与语言无关
可以以二进制发布
支持向前兼容
DCOM支持分布式计算
接口的定义及作用
接口是有序排列的一组函数指针,可以简单理解为一组函数,每一个接口相当于该组件对外的一个窗口
4.COM接口有哪些规定
IUknown:所有组件都有一个称为IUknown的接口,该接口中依次给出的三个函数是:QueryInterface(对组件的接口进行查询,若存在某个接口,客户可以获得该接口中的服务),
QueryInterface(int interfaceID, void**pValue)第一个参数为接口ID,第二个存放返回值(支持接口约定的实体)
AddRef,Release通过计数器共同完成引用计数功能(为何用计数器?组件使用时需载入内存,又可以被多个客户使用,无论哪个用户把它载入内存,为了知道何时可以从内存中卸载,需要一个计数器来记录组件的使用情况,实际可以为每个接口安排一个计数器,当一个组件所有接口计数器都为0,就可以卸载了)。一个组件可以同时被多个客户所使用,卸载时需要确定没有人使用,即计数器为0时
其他接口:一个组件的其他接口可以看作IUknown接口的子接口,即其它任何一个接口的前三个函数与IUknown接口中的三个函数相同。客户获得一个接口后,可以查询其它接口是否存在。每个接口能够进行引用计数。
不变性:一旦公开了某一个接口,该接口将永远不能发生改变。包括函数在接口中的顺序。改变接口部分的唯一方式是:为组件增加新的接口。目的是兼容。版本升级不影响老客户。每一个接口有唯一的接口标识(ID)。
编写COM组件的步骤(利用DLL?)
定义接口,在接口中声明组件中需要使用的方法和变量,声明方法使用虚函数声明,定义的接口都要继承IUknown。
定义实现接口方法的抽象类。实例化类之后,才会对已经实例化的类对象分配内存空间。对类中接口的引用,可以通过对象指向接口的指针来调用。
以动态链接库DLL的形式,定义指向是实例化类对象的指针,并可以向调用它的接口返回标识,生成模块,定义文件,并在客户可以获取某个组件接口之前,将DLL装载到过程空间中并创建此组件。
创建类厂。在类厂中使用CreateInstance方法连接到动态链接库接口,并用指针指向这个接口。用DLLGetClassObject函数创建类厂,并根据类厂的接口标识返回类厂指针。
实例化类厂。使用CoCreateInstance实例化类厂,即生成一个实例类厂的对象,这个对象是可以被用户调用的。
类厂(IClassFactory)接口的作用
笔记版:提供了一种灵活的控制组件创建的方法,这种方法中组件由特定的类厂创建:通过CreateInstance(int interfaceID, void** pValue),而特定的类厂实现了类厂接口,给出了CreateInstance的具体实现,客户使用接口指针,可决定用特定的工厂来产生特定的组件,将不同组件的实例化延迟。
资料版:
CoCreateInstance函数是创建组件的时候使用最多的一种方法,但是它的灵活性不能够满足所有组件的需求,它没有给客户提供一种能够控制组件创建过程的方法,在建立好一个组件之后,无法控制将组件装载或检查客户是否具有权限。因此需要引入类工厂以获得更高的灵活性。
CoCreatInstance实际上并没有直接创建组件,用CoCreateInstance创建的组件实际上是通过IClassFactory创建的,类厂唯一的功能就是创建其他组件。客户可以通过类厂所支持的接口来对类厂创建组件的过程加以控制。创建组件的标准接口就是IClassFactory。
客户可以通过类厂组件创建其他组件,使用类厂来创建组件可以给客户提供一种能够控制组件创建过程的方法,并且在建立好一个组件之后可控制将组件装载到内存中何处或者检查客户是否有权限
使用动态链接库做组件的一般过程
编写头文件,定义各种业务接口以及接口标识符,其他的接口需要继承IUnknown接口,包括类厂接口及ID。这个文件需要客户知道(客户知道组件的接口)
实现定义好的业务接口,可以用一个类来实现所有接口,也可以每个类实现一个接口,后者使用一个类聚合了每个接口的实现类,考
您可能关注的文档
最近下载
- 6-CFD基础及软件应用汇总课件.pptx VIP
- 移动通信职业规划.docx VIP
- 2024年杭州钱塘新区城市发展集团有限公司招聘真题 .pdf VIP
- 输日热加工禽肉及其产品动物卫生要求.pdf VIP
- 2025杭州钱塘新区城市发展集团有限公司社会招聘22人笔试备考题库及答案解析.docx VIP
- 药物分析与常用组学技术在药学服务中的应用题库答案-2025年华医网继续教育.docx VIP
- 海丰2022年事业编招聘考试《公共基础知识》真题及答案解析三.docx VIP
- 7、美国联邦法典第九卷联邦肉类检验法.doc VIP
- 2024年入团积极分子考试题库.docx VIP
- 《荷塘月色》课件25张 .ppt VIP
文档评论(0)