- 7
- 0
- 约2.67万字
- 约 50页
- 2017-05-10 发布于重庆
- 举报
【精品论文】6接口的其他实现方法(论文资料)
六 . COM接口的其他实现方法 基于表格驱动的接口查询 接口查询的本质 宏 应用 多重继承下的名字冲突 潜在的缺陷 临时的方案 使用复合技术(嵌套类)实现接口 COM主对象和COM子对象 COM 主对象的实现 COM 子对象的实现 基于复合技术的COM对象的内存结构 1.基于表格驱动的接口查询 1.1 接口查询的本质 前面我们使用继承的方式实现接口,使用多重继承的方式实现多个接口. 在这种方式下,接口的查询QueryInterface函数的实现非常的直接且直观. 在多重继承方式下,接口类是基类, IUnkown接口是最上层的基类. 对象类是接口类的派生的子类. 在内存中,子类比基类“大”. 因为子类除了包含基类的成员以外,还包含自己的成员.子类的一个实例中包含有基类的一个“subobject”,子对象. 如果这个基类还有基类,这个子对象中还含有一个更上层的子对象. QueryInterface函数的本质是: 使用statice_cast操作符在子类的对象中加上基类的偏移从而从而得到基类的子对象.转换到不同的基类时,要加上不同的偏移. 所以QueryInterface实际上是在不同的基类和不同的偏移中工作. 我们可以把基类和对应的偏移量抽象出来.作成表格.使得QueryInterface的工作更加形式化. 最终使得COM的编码更加形式化. (这里的工作为向MFC过渡而热身.我们看到,MFC中古怪的代码也是有其理性的由来的.? ) 1.2 宏 为了实现表格驱动的QueryInterface, 我们定义这样的一个结构: typedef HRESULT (STDAPICALLTYPE *INTERFACE_FINDER)(void *pThis, DWORD dwData, REFIID riid, void **ppv); //这是一个查询接口的函数,暂时这里并没有用上. #define ENTRY_IS_OFFSET INTERFACE_FINDER(-1) //所以这里定义了一个伪函数ENTRY_IS_OFFSET typedef struct _INTERFACE_ENTRY { const IID * pIID; // 要寻找的接口的IID INTERFACE_FINDER pfnFinder; // finder function long dwData; // finder function所需的参数.这里指偏移量. } INTERFACE_ENTRY; //暂时,这里只使用了第一和第三个分量 然后定义了几个宏: #define BASE_OFFSET(ClassName, BaseName) \ (DWORD(static_castBaseName*(reinterpret_castClassName*(0)) - 0 这个宏用来计算基类BaseName到子类ClassName的偏移.(一个完整对象中的基类子对象的起始地址到完整对象的起始地址的偏移) reinterpret_castClassName*(0 把绝对内存地址0换成为子类对象的地址. static_castBaseName*(子类指针) 把子类指针转换为基类指针.这个工作由编译器计算出偏移.并且加上偏移值. DWORD(基类指针地址) - 0基类指针地址转换成绝对的数字后减去子类指针的绝对地址的数字. 宏BASE_OFFSET(ClassName, BaseName) 返回基类BaseName到子类ClassName的偏移量. 如下图所示: 在这个宏的基础上又定义了几个宏: #define BEGIN_INTERFACE_TABLE(ClassName) \ typedef ClassName _InterfaceTableClassName;\ //申明了一个静态函数,返回接口表 static const INTERFACE_ENTRY *GetInterfaceTable(void) \ { static const INTERFACE_ENTRY table[] = {\ //函数体中, 定义一个静态的接口表, 定义了类,此表就分配了.对所有的对象而言是同一个. #define IMPLEMENTS_INTERFACE(ItfName) \ { IID_##ItfName, ENTRY_IS_OFFSET, BASE_OFFSET(_InterfaceTableClassName, ItfName) }, //接口表项,对于接口I
您可能关注的文档
- 【商业地产】长沙太平街历史文化街区重建项目整体定位实施策略91.ppt
- 【小作】管理的实践(彼得德鲁克).pptx
- 【数学】322《平面法向量与平面的向量表示》课件刘海涛.ppt
- 【新产品上市方案大全】全新金杯皮卡SUV上市全案企划书.ppt
- 【新课标RJ】2014年中考语文复习方案(真题体验方法总结)课件结合主旨,畅谈感受.ppt
- 【方案总结】互联网信息服务业务可行性研究报告及技术方案.doc
- 【新人专属会】客户管理版块工作日志的使用方法.ppt
- 【方案总结】尹贻林教授的《管理的技术及问题解决方案》.ppt
- 【方案总结】工控机升级方案.ppt
- 【方案总结】地质资料汇交监管平台建设工作方案.doc
最近下载
- 2025山东劳动职业技术学院单招《数学》通关题库含完整答案详解(夺冠系列).docx VIP
- 巴蜀中学2026届高三1月适应性月考卷(六)英语试卷(含答案解析).pdf
- 大数据技术及其在土木工程中的应用.doc VIP
- SI210 控制系统调试试运转.pdf VIP
- (第一届吉林大学天文知识竞赛预赛试题及答案.doc VIP
- 《大学物理简明教程》教学课件.pptx
- 2025年高考新高考全国Ⅰ卷英语试题(含听力音频、听力原文和答案).pdf VIP
- 2025年一级造价师《建设工程造价案例分析(交通运输)》考试真题(后附权威解析).pdf VIP
- 2025年山东劳动职业技术学院单招语文模拟试题(附答案解析) 完整版2025.pdf VIP
- 精品解析:重庆市南开中学校2024-2025学年九年级上学期期末考试数学试题(原卷版).docx VIP
原创力文档

文档评论(0)