- 0
- 0
- 约1.79万字
- 约 10页
- 2017-09-09 发布于湖北
- 举报
COM接口与对象
COM接口与对象 潘爱民 北京大学计算机研究所 2003-9-19 /CompCourse2003/ 内容 组件的接口 COM接口 COM IDL COM对象 从历史看COM COM产生的背景 93年因为OLE 2的需要而产生 OLE 1的缺陷 COM又从OLE中脱颖而出 COM的优势不限于OLE COM成为Microsoft跟上Internet的一项重要基础技术 今天的Windows平台上,COM无处不在 COM和.NET COM基础——三个概念 COM组件 组件:可独立发布的二进制组件 在Windows平台上为DLL或者EXE COM对象 通过COM接口提供服务 符合OO中对象的基本概念 COM接口 客户与对象之间的协议,对象实现COM接口,客户使用COM接口 如何设计? COM组件 为方便起见,只讨论Windows平台上DLL类型的组件 COM对象 如何标识一个对象?对象以什么形式存在?客户如何创建对象? 对象如何暴露接口?一个或是多个? COM接口 要求:跨编译器、跨语言、跨平台 设计COM接口——从C++入手 C++类:接口与实现的分离 接口:类的public部分 设计COM接口——从C++入手(续) C++类的实现 C++类的链接(linking) 静态链接 许多类库的做法 编译时刻的链接 静态链接的缺点 代码重复:多个程序各有自己的代码,需要更多的内存 客户程序占据更多的外存空间 库代码更新需要重新编译所有的客户程序 C++类的链接linking(续) 动态链接 运行时刻的链接 动态链接形式 编译时刻通过引入库 运行时刻完全动态 Dll Hell C++接口如何走向COM接口 动态链接符合COM的需要 C++中类形式的接口存在的问题 客户看到了什么? 若用Visual C++ 5.0/6.0编译器 客户眼中的C++类(续) 如果是Borland C++编译器(4.02) 命名冲突解决方案1 模块定义文件(.def)中给出别名 命名冲突解决方案2 模块定义文件(.def)中给出序号别名 命名冲突解决方案3 使用C++类的vtable C++类的vtable不随编译器而变化 vtable包含了各个函数的原型,顺序固定,每个函数的参数、返回类型等,函数名并不重要 vtable要求这些接口函数必须是虚函数 客户如何得到vtable? 仍然需要有一种办法来创建C++类 new/delete?需要对象的二进制结构——问题2 C++对象的二进制结构 C++的封装是语法上的封装,而不是二进制封装 new/delete是编译器相关的 编译器不仅要知道public信息,也要知道private信息 C++对象的二进制结构是编译器相关的 即使客户看到的C++类公开接口没有变化,但是C++类的实现改变了,仍然会打破客户与对象之间的连接 C++对象与客户之间的连接问题 客户与C++对象之间的连接点越小越好 只有接口部分必要的信息才放入接口 把C++类的实现细节与接口分开 提取出针对所有编译器都不变的因素作为客户与对象共享的接口信息 方案1:句柄 句柄方案 方案1:句柄 纯虚基类方案 前提条件: 在给定平台上所有的编译器都会产生同样的二进制结构 纯虚函数在单继承情况下满足这一条件 纯虚基类只包含虚函数,限定每个虚函数的调用习惯 对于跨平台的情形,我们肯定要通过中间层,所以暂时可以不考虑 虚函数的继承布局情况 class B : pulic A { private : int value1; public: virtual void Func1(void) virtual void Func2(void) }; 纯虚基类方案例子 解决了名字冲突 解决了C++类的二进制布局不兼容问题 客户只看到vtable,没有看到其他的实现细节 保证不同语言编写的程序可以互操作 在不改变接口的情况下,可以单独升级客户或者对象 纯虚接口的使用? 假如有一个C++对象实现了IString 如何创建对象? 不能使用new DLL的唯一接口是引出函数 可行方案:单独提供一个引出函数供客户调用 通过引出函数创建对象 创建对象 如何删除对象? 删除对象发生在客户与对象建立联系之后,所以比较好办 但是不能用delete 可以让对象自己把自己删除 在IString中增加一个方法 删除对象自身 小结 我们已经建立起对象与客户之间的基本通信方式 更高的要求: 接口的升级 增加新的功能 生命周期管理 什么时候该删除对象 多个客户共享同一个对象,如何管理? 对象的进化 在原有接口的基础上增加新的功能,例如 对象的进化(续) 接口的进化 对象实现多个接口 对象实现多个接口(续一) 对象实现多个接口(续二
您可能关注的文档
- Chp09_供应链管理.pdf
- CI+ 培训.ppt
- CICS概述及命令.ppt
- Chinese Cuisine.ppt
- chapter06呼吸系统.ppt
- CiteSpace常见问题解答.pdf
- CISCO控制器无线AP配置方法.ppt
- CLEARCASE常见问题解答.pdf
- CMM.docx
- CNAS-R01认可标识和认可状态声明管理规则.pdf
- 安徽省华师联盟2025-2026学年高三上学期1月质量检测生物试卷+答案.doc
- 安徽省华师联盟2025-2026学年高三上学期1月质量检测语文试卷+答案.doc
- 四川省绵阳南山中学实验学校2025-2026学年高三上学期1月月考数学含答案.doc
- 2026届辽宁省大连市高三上学期双基考试物理试卷+答案.doc
- 辽宁名校联盟2026年1月高三上期末联考质量检测化学含答案.doc
- 辽宁名校联盟2026年1月高三上期末联考质量检测生物含答案.doc
- 辽宁名校联盟2026年1月高三上期末联考质量检测英语含答案.doc
- 辽宁名校联盟2026年1月高三上期末联考质量检测政治含答案.doc
- 黑龙江省龙江教育联盟2026年1月高三上学期期末考试化学含答案.doc
- 黑龙江省龙江教育联盟2026年1月高三上学期期末考试生物含答案.doc
最近下载
- 工业激光安全培训课件.ppt VIP
- Windchill模块功能白皮书.doc VIP
- 工程图学基础(第三版)刘宇红全套PPT课件.ppt
- 慢性肾脏病早期筛查、诊断及防治指南(2022年版).pptx VIP
- 2025年四川省达州市法官逐级遴选考试题及答案.docx VIP
- 一种4,6-二氨基间苯二酚二盐酸盐的生产系统.pdf VIP
- 贵州省六盘水市高二上学期1月期末英语试题(含答案).docx VIP
- 奥迪A6轿车ABS系统故障诊断与维修.doc VIP
- 备战2025广东省深圳市中考数学真题汇编《圆的计算与证明》含答案解析.pdf VIP
- GB 50183-2015 石油天然气工程设计防火规范条文解释.ppt VIP
原创力文档

文档评论(0)