




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 5.4 COM编程技术编程技术COM(Component Object Model,组件对,组件对象模型)。作为一个真正意义上的组件,象模型)。作为一个真正意义上的组件,应具备如下特征:应具备如下特征:实现了对开发语言的封装。实现了对开发语言的封装。以二进制形式发布。以二进制形式发布。能够在不妨碍已有用户的情况下被升级。能够在不妨碍已有用户的情况下被升级。在网络上的位置必须能够被透明的重新分在网络上的位置必须能够被透明的重新分配。配。 5.4.1 COM对象对象 COM是面向对象的软件模型,在是面向对象的软件模型,在COM中,中,对象是某类组件的一个实例。对象是某类组件的一个实例。 COM对
2、象的应用者对象的应用者应用程序则称为应用程序则称为客户。客户。 每个每个COM组件对象都拥有一个以上的接组件对象都拥有一个以上的接口,口,COM对象可通过一个或多个接口与对象可通过一个或多个接口与客户进行交互。客户进行交互。 在在COM模型中,由模型中,由COM对象实现的每一对象实现的每一个接口,都分别由一个个接口,都分别由一个128位的二进制全位的二进制全局统一标识符局统一标识符GUID(Globally Unique IDentifier)来标识。)来标识。 GUID是一个随机数,并不绝对保证唯一性,是一个随机数,并不绝对保证唯一性,但发生标识符相重的可能性非常小。从理但发生标识符相重的可
3、能性非常小。从理论上讲,如果一台机器每秒产生论上讲,如果一台机器每秒产生10 000 000个个GUID,则可保证(概率意义上),则可保证(概率意义上)3240年不重复。年不重复。 下面是一个下面是一个GUID的例子。的例子。54BF6567-1007-11D1-B0AA444553540000在在C/C+中可以用这样的结构来描述:中可以用这样的结构来描述: Typedef struct_GUID DWORD Data1; WORD Data2; WORD Data3; BYTE Data48; GUID于是前面的于是前面的GUID例子可以定义为例子可以定义为extern C const GU
4、ID CLSID_MYSPELLCHECKER= 0 x54BF6567,0 x 1007,0 x 11D1,0 x B0,0 x AA,0 x 44,0 x 45,0 x 53,0 x54,0 x00,0 x00COM库提供的库提供的API函数可产生函数可产生GUID:HRESULT CoCreateGuid(GUID *pguid););如果如果GUID创建成功,则函数返回创建成功,则函数返回S_OK,并且,并且pguid将指向所得到将指向所得到的的GUID值。值。5.4.2 COM接口接口1从从API到到COM接口接口平面型的平面型的API接口存在以下一些问题:接口存在以下一些问题:当当
5、API函数非常多时,使用非常不方便,函数非常多时,使用非常不方便,需要对函数进行组织。需要对函数进行组织。API函数需要标准化,按照统一的调用方函数需要标准化,按照统一的调用方式进行处理,以适应不同的语言编程实现。式进行处理,以适应不同的语言编程实现。 图5.8 应用程序A和B通过API接口共用一个字典组件应用A或组件AAPI字典组件应用B或组件B2COM接口的定义和标识接口的定义和标识图图5.9 COM5.9 COM接口结构接口结构指针指针对对象象实实现现接口指针接口指针pvtablepvtablevtablevtable指针函数指针函数1 1指针函数指针函数1 1指针函数指针函数1 13C
6、OM接口的内存模型接口的内存模型COM对象往往有自己的属性数据,这些属对象往往有自己的属性数据,这些属性数据反映了对象的状态,也正是通过这性数据反映了对象的状态,也正是通过这些属性数据,才反映了对象与对象的不同。些属性数据,才反映了对象与对象的不同。4COM接口的特点接口的特点二进制特性二进制特性接口的不变性接口的不变性继承性(扩展性)继承性(扩展性)多态性多态性运行过程中的多态性运行过程中的多态性5.4.3 IUnknown接口接口 COM定义的每一个接口都必须从定义的每一个接口都必须从IUnknown继承过来,其原因在于继承过来,其原因在于IUnknown接口提供接口提供了两个非常重要的特
7、性:了两个非常重要的特性:生存期控制;生存期控制;接口查询接口查询 ;客户需要控制对象客户需要控制对象 如果继续对对象进行操作,则它必须保证对如果继续对对象进行操作,则它必须保证对象能一直存在于内存中;如果操作已经完成,象能一直存在于内存中;如果操作已经完成,以后也不再需要该对象了,则它必须及时地以后也不再需要该对象了,则它必须及时地把对象释放掉,以提高资源的利用率把对象释放掉,以提高资源的利用率 。首先来看一下首先来看一下IUnknown的定义(的定义(IDL):): interface IUnknown HRESULT QueryInterface(inREFIID iid,out voi
8、d * * ppv);); ULONG AddRef(void);); ULONG Release(void);); QueryInterface用于查询用于查询COM对象的其他接口指针,对象的其他接口指针,AddRef和和Release用于对引用计数进行操作用于对引用计数进行操作 1引用计数引用计数 COM采用了采用了“引用计数引用计数”技术来解决内存技术来解决内存管理的问题,决定是否继续生存下去。管理的问题,决定是否继续生存下去。“引引用计数用计数”是一个数值,该数值的含义为有多是一个数值,该数值的含义为有多少个有效指针在引用该少个有效指针在引用该COM对象。对象。 当客户得到了一个指向该对象的接口指针时,当客户得到了一个指向该对象的接口指针时,引用计数值增引用计数值增1;当客户用完了该接口指针;当客户用完了该接口指针后,引用计数减后,引用计数减1。 当引用计数减到当引用计数减到0时,时,COM对象就应该把自对象就应该把自己从内存中清除掉。己从内存中清除掉。 2引用计数的实现引用计数的实现问题:在什么层次上进行引用计数呢?问题:在什么层次上进行引用计数呢?按照按照COM规范,一个规范,一个C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 火灾应急预案培训制度(3篇)
- 2025年法学概论考试的知识掌握方式与试题及答案
- 2025年科技进步对战略影响试题及答案
- 行政法与社会资本的关系探讨试题及答案
- 2025年信息技术应用能力试题及答案
- 2025年法学概论的实务考察及试题及答案
- 行政法学重要时事考题及答案
- 开源软件项目2025年考试试题及答案
- 2025年网络管理资格考核试题及答案
- 2025二手笔记本电脑转让合同
- 2025甘肃省农垦集团有限责任公司招聘生产技术人员145人笔试参考题库附带答案详解
- 滴滴代理合同协议
- 广西《短时强降水强度评估方法》
- 2025年随州国有资本投资运营集团有限公司招聘笔试参考题库含答案解析
- 教师的文化素养与试题及答案
- 新《医学微生物学》考试精练试题库(含答案)
- 江苏交控笔试试题及答案
- 央行MPA考核细则
- 2024-2025学年陕旅版(三起)(2024)小学英语三年级下册(全册)知识点归纳
- 大数据时代统计信息安全挑战与应对策略研究
- 2025年搅拌车市场规模分析
评论
0/150
提交评论