




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
组件对象模型 组件对象模型 component Object Model COM 是许多新的微软 ActiveX 技术的基础 COM 所解决的所解决的问题问题 Windows 程序模块之间的相互通讯并没有一种标准的方法 想 DLL 的导出函数 动态数据交换 Windows 剪切板和 Windows API 提供的方法 但这些远远不够 不能将未来的面向对象操作系统建立的诸 如此类的相互之间标准上 然而利用组件对象模型就可以做到 COM 的本的本质质 COM 为 windows 提供了统一的 可扩充的 面向对象的通讯协议 它支持以下的特性 为 win32 客户 exe 载入和调用 Win32dll 提供了一种标准的 与语言无关的方法 为一个 EXE 控件同一机器上的另一个 EXE 提供了通用的方法 用 ActiveX 代替 VBX 为应用程序与操作系统的交换操作提供了一种新的方法 为适应新的协议提供了可扩充性 如 Microsoft 的 OLE DB 数据接口 分布式 COM DCOM 允许一个 EXE 与不同机器上的另一个 EXE 进行通讯 所以可以这么理解 COM COM 是一种协议它建立了一个软件模块同另一个软件模块之间的连接 然后 再将其描述出来 当这种连接建立起来之后 俩个模块之间就可以通过称为 接口 的机制来进行通讯 这些接口既不需要静态的或动态的连接入口点 也不需要编码很复杂的地址 这和那些用于启动通讯过 程的一般 COM 函数有所不同 什么是什么是 COM 接口接口 COM 接口是一个 C 基类 实际上它是一个 C 接口 它定义了一组纯虚函数 这些函数完全控制了其 派生类行为的一些方面 MFC 库中通过嵌套类事先 COM 接口 class CSpaceship protected int m nPosition int m nAcceleration int m nColor public CSpaceship m nPosition m nAcceleration m nColor 0 class XMotion public IMotion public XMotion virtual void Fly virtual int m xMotion class XVisual public IVisual public XVisual virtual void Display m xVisual friend class XVisual friend calss XMotion m xMotion 和 m xVisual 实际上是 CSpaceship 的内嵌数据成员 实现方法函数 int METHOD PROLOGUE 是一个宏 MFC 宏它使用了 C 语言的 offsetof 操作符来获得父类的 this 指针 pThis 由于编译器总能知道父类数据的起点地址到嵌套类数据起点地址的偏移量 因此 GetPosition 函数可以 访问到 CSpaceship 的数据成员 m nPosition 现在假设已有关于某个特定的 CSpaceship 对象的俩个接口指针 pMot 和 pVis 则可以按照如下方式来调 用接口成员函数 pMot Fly pVis Display 在 C 中每个类 有虚函数 都有一个虚函数表 vtable 同样 CSpaceship XMotion 和 CSpaceship XVisual 都有各自的 vtable 对于每一个对象 都有一个指针指向该对象数据的指针 而对象数据的第一个元素就是 一个指向它所在的类的 vtable 的指针 指针的关系如下图所示 IUnknown 接口和接口和 QueryInterface 成成员员函数函数 如何获得 com 接口指针 COM 为此专门定义了一个非常特殊的 IUnKnown 接口 事实上所有的接口都是从它派生而来的 IUnknown 接口有一个纯虚函数 QueryInterface 它返回的是一个接口指针 该接口的 ID 正是作为参数传 递给 QuerInterface 函数的接口 ID 以上所有的这些都假定事先已有了一个接口指针作为开始 该指针即可 是 IUnknown 指针 也可以是一个指向派生接口的指针 例如 structIUnknown virtual BOOL QueryInterface int nIid void ppvObj 0 struct IMotion public IUnknown virtual void Fly 0 virtual int struct IVisual public IUnknown virtual void Display 0 为了满足编译需要 必须在 CSpaceship XMotion 和 CSpaceship XVisual 中加入 QueryInterface 的执行 功能 对于每一个派生类编译器都会为它们创建一个 vtable 并且将基类函数指针放在上部 对于给定的 CSpaceship 对象 可以通过获得对应的内嵌对象的地址 使 GetClassObject 获得相应接口的 指针 例如 BOOL CSpaceship XMotion QueryInterface int nIid void ppvObj METHOD PROLOGUE CSpaceship Motion switch nIid case IID IUnknow case IID IMotion ppvObj break case IID IVisual ppvObj break default ppvObj NULL return FALSE return TRUE 下面给出的是 GetClassObject 函数它使用了 m xMotion 的地址来为新构造的 CSpaceship 对象提供第一 个接口指针 BOOL GetClassObject int CSpaceship pObj new CSpaceship IUnknown pUnk return pUnk QueryInterface nIid ppvObj 现在客户程序就可以调用 QueryInterface 来获得 IVsiual 指针 IMotion pMot IVisual pVis GetClassObject CLSID CSpaceship IID IMotion void pMot Fly pMot QueryInterface IID IVisual void pVis Display 引用引用计计数 数 AddRef 和和 Release 函数函数 COM 接口没有虚析构函数 因此无法使用下面的语句 Delete pMot Don t do this COM 是一个非常严格的协议来删除对象 其中 IUnknown 的另俩个虚函数 AddRef 和 Release 是关键 每一个 COM 类都有一个数据成员 它被用来统计对象 用户 数目 每次当组件程序返回一个新的接口指针 时 它都会调用 AddRef 由 AddRef 将 m dwRef 加上 1 当客户程序使用完该指针时 它会调用 Release 只有当 m dwRef 的值为 O 时 对象本身才会被删除 例如 DWORD CSpaceship XMotion Release METHOD PROLOGUE CSpaceship Motion if pThis m dwRef 0 return 0 if pThis m dwRef 0 delete pThis return 0 return pThis m dwRef 类类厂厂 COM 所谓的 类厂 实际上是指 对象厂 object factory 类厂是一种类它被用来支持名为 IClassFactory 的特殊的 COM 接口 像所有的接口一样 IClassFactory 接口也是从 IUnkown 派生而来的 IClassFactory 的主要成员函数是 CreateInstance 因为我们无法直接调用目标类的构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心理疏导与情绪管理策略计划
- 建立科学的选拔机制计划
- 2024年马鞍山市人民医院制招聘笔试真题
- 财务利润模式计划
- 前台工作中的领导力发展计划
- 积木与搭建游戏教育方案计划
- 2024年扶余市事业单位招聘工作人员笔试真题
- 2024年毕节市广播电视台招聘笔试真题
- 2025年函数题软件设计师试题及答案
- 法学概论应试准备试题及答案
- GB/T 3091-2025低压流体输送用焊接钢管
- 第五讲铸牢中华民族共同体意识-2024年形势与政策
- NB-T 47013.1-2015 承压设备无损检测 第1部分-通用要求
- GB/T 13912-2020金属覆盖层钢铁制件热浸镀锌层技术要求及试验方法
- 毽球校本课程
- 农村建筑工匠培训讲座ppt课件
- (高清版)建筑防护栏杆技术标准JGJ_T 470-2019
- 脑梗死标准病历、病程记录、出院记录模板
- 主体结构混凝土浇筑技术交底
- 幕墙设计任务书
- 贵州安顺柏秧林煤矿发生重大透水事故人被困
评论
0/150
提交评论