《COM对象与接口》PPT课件

《COM对象与接口》PPT课件

ID:45446896

大小:227.00 KB

页数:50页

时间:2019-11-13

《COM对象与接口》PPT课件_第1页
《COM对象与接口》PPT课件_第2页
《COM对象与接口》PPT课件_第3页
《COM对象与接口》PPT课件_第4页
《COM对象与接口》PPT课件_第5页
资源描述:

《《COM对象与接口》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第二章COM对象和接口主要内容COM对象的概念与特征接口的定义与标识接口的内存模型接口的特点IUknown接口引用计数接口查询字典组件举例COM基础——三个概念COM组件组件:可独立发布的二进制组件在Windows平台上表现为DLL或者EXECOM对象通过COM接口提供服务符合OO中对象的基本概念COM接口客户与对象之间的协议,对象实现COM接口,客户使用COM接口从而访问对象需要思考的一些问题COM组件组件的类型:进程内组件(DLL)、进程外组件(EXE)为方便起见,只讨论Windows平台上DLL类型的组件COM对象如何标识一个对象?对象以什么形式存

2、在?客户如何创建对象?对象如何暴露接口?一个或是多个?COM接口要求:跨编译器、跨语言、跨平台2.1COM对象概念COM对象是客户程序与组件程序进行交互的实体。COM对象包含属性和方法(或者状态和操作):属性反映对象的存在,也是区别于其他对象的要素;方法是对象提供给外界的接口。能够提供服务(通过COM接口)对象的实现由组件完全包装起来2.1.1COM对象的标识—CLSIDCOM组件的位置透明性客户程序并不直接访问COM对象,而是通过一个唯一的全局标识符进行对象的创建和初始化工作。可选的标识符方案:字符串形式:可读性好,名字冲突的可能性大定长位数的整数:如

3、何保证唯一性?(管理组织/大随机数)GUID是COM规范采取的方案是一个128位的随机数不绝对保证唯一性,但发生冲突的可能性非常小例如:{54BF6567-1007-11D1-B0AA-444553540000}GUID续GUID的C/C++结构描述typedefstruct_GUID{DWORDData1;WORDData2;WORDData3;BYTEData4[8];}GUID;保证随机性的考虑空间上:网络中的计算机通常取网卡的地址(唯一的)时间上:同一机器在不同时候产生的标识符总不相同GUID(续)产生GUID的工具VisualC++提供的两个工

4、具:UUIDGen.exe:命令行程序GUIDGen.exe:基于对话框的程序COM库提供的API函数HRESULTCoCreateGuid(GUID*pguid);GUID与CLSIDCLSID是标识COM对象的GUID二者在结构上完全一致2.1.2COM对象与C++对象的比较层次差异COM对象建立在二进制级的基础上C++对象建立在源代码级的基础上封装特性COM对象的数据完全封装在对象内部,不能直接访问C++对象的公有数据成员是可以访问的可重用性COM对象的重用表现为包容和聚合C++对象的重用表现为继承与组合多态性的表现形式不同COM对象的多态需要通过

5、接口来表现2.2COM接口基本内容接口定义与标识用C++定义接口IDL接口的内存模型接口的特点2.2.2接口定义和标识定义是一个函数集,以二进制的形式给出了从一方到另一方的调用规范;函数的地址封装在一个数据结构中。这个数据结构称为“接口函数表”在C++中称为“虚函数表”,简称vtable对于一个接口来说,它的vtable是确定的,即:接口成员函数的个数是不变的;其先后顺序也是不变的客户程序通过一个指向vtable的指针来调用接口成员函数COM接口结构COM接口举例(C语言)structIDictionaryVtble;structIDictionary{

6、IDictionaryVtble*pVtbl;};structIDictionaryVtble{BOOL(*Initialize)(Idictionary*this);BOOL(*LoadLibrary)(Idictionary*this,String);……void(*FreeLibrary)(Idictionary*this);};COM接口标识--IIDInterfaceIdentifier是GUID的一种用法例如:extern“C”constIIDIID_Iunkown={0x00000000,0x0000,0x00000xc0,0x00,0x0

7、0,0x00,0x00,0x00,0x00,0x46};如果客户程序要使用一个COM对象的某个接口,必须知道该接口的IID以及它能提供的方法。2.2.3用C++语言定义接口COM接口结构中的vtable与class的vtable完全一致因此,用class描述COM接口是最方便的手段举例:classIDictionary{virtualBOOLInitialize()=0;virtualBOOLLoadLibrary(String)=0;……virtualvoidFreeLibrary()=0;};类IDictionary的内存结构2.2.4接口描述语言I

8、DL以OSF的IDL为基础基本数据类型与C语言非常接近,包括结构、联合、枚举、t

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。