- 1、本文档共87页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 COM的实现 主要内容 进程内组件和进程外组件 通过注册表管理COM对象 类厂的概念与实现 COM库的相关内容 COM实现过程 字典组件的实现 序 COM不但提供组件程序与客户程序之间交互的协议细节,也提供了实现细节,用于协调组件程序和客户程序的行为,并尽可能提高资源利用率。 COM是一个与平台无关的组件软件模型; 但COM的实现与操作系统平台密切相关。 我们在Windows上使用的COM标准只是COM的一个具体实现。 3.1 进程内组件和进程外组件 进程内组件( in process component ) DLL形式的组件 客户程序调用组件程序的服务时,会把组件程序装入到自己的进程中,所以客户程序和组件程序运行在同一个进程空间中。 进程外组件( out of process component ) EXE形式的组件 组件程序在被调用时用有自己的进程空间,所以客户程序与组件程序运行在不同的进程空间中。 3.1.1 进程内组件 客户程序要想使用DLL形式的组件,则必须知道该DLL的特定信息,而这些信息是通过“引出”来暴露给客户程序的。 DLL程序既可以引出函数,也可以引出全局变量。 DLL函数的引出,是通过引出函数表完成的: 引出函数表中包括:函数的名字、序号、地址。 为了使生成的DLL通用,需要让引出函数遵循__stdcall调用习惯。并在函数定义的前面加上extern “C”说明符(不是必须的)。 说明DLL引出函数的方法 1、传统方法 首先用extern “C”和_stdcall修饰函数,比如: Extern “C” int _stdcall myFuction(int n); 然后编写一个DEF文件,用于描述DLL的相关信息,如: ;DictComp.def: Declares the module parameters for the DLL LIBRARY “DictComp” DESCRIPTION ‘DictComp Win32 DLL’ EXPORTS CreateObject @1 2、直接说明 可以通过_declspec(dllexport)说明符直接说明引出函数: Extern “C” _declspec(dllexport) int _stdcall myFuction(int n); 客户程序如何使用DLL程序 首先,客户程序调用LoadLibrary函数装入DLL,并得到DLL的模块句柄,供后面使用: HMODULE hModual; hModual = LoadLibrary(DictComp.dll); 然后,客户程序调用GetProcAddress函数获得DLL中引出函数的地址: typedef BOOL (_stdcall* pf)(CLSID clsid, const IID iid, void **ppv); pf fnCreateObject; fnCreateObject = (pf)GetProcAddress(hModual, CreateObject); fnCreateObject(clsid, iid, ppv); 最后,调用FreeLibrary把DLL卸出内存: FreeLibrary(hModual); 3.1.2 进程外组件 EXE形式的组件称为“进程外组件”。 进程外组件带来的问题: 一个进程如何调用另一个进程中的函数? 参数如何从一个进程传到另一个进程? Windows平台上进程之间通信的方法: 动态数据交换(DDE) 命名管道(named pipe) 消息机制 RPC/LPC等等 COM采用RPC/LPC的方法实现进程间的通信。 应用程序调用其他进程中的系统服务 客户程序调用进程外组件程序 代理DLL和存根DLL 客户程序只与同一进程中的代理DLL打交道; 进程外组件程序只与同一进程中的存根DLL打交道。 代理DLL和存根DLL除了完成LPC调用外,还需要对参数和返回值进行翻译和传递: 代理DLL将客户程序的参数及其它一些调用信息组装成一个数据包传递给组件进程,这个过程称为“参数列集”。 组件进程接收到数据包后,进行解包操作,把参数信息提取出来,这个过程称为“散集”。 进程外组件的LPC调用以及列集散集过程对于程序员来说是透明的,不用关心这些细节。 在实现进程外组件时,需要额外实现代理和存根DLL. 3.2 通过注册表管理COM对象 系统注册表是一个全操作系统范围公用的信息仓库,其中包含了所有COM组件的必要的信息。 按照COM规范,客户程序要通过COM库完成COM对象的创建工作,而COM库要通过注册表所提供的信息来进行COM对象的创建工作。 通过对组件进行注册,将组件信息写入注册表。 如果
您可能关注的文档
- 第4篇 集成触发器 [兼容模式].pdf
- 第八章 电脑用久了,运行速度慢了处理方法.doc
- 有限元分析_第6讲第28节_对称边界条件.pdf
- 多媒体教室集成方案_附件.doc
- 第三单元的练习与十个翻译.doc
- 中断及异常3学时.ppt
- 第一篇 微观粒子特性.ppt
- 新概念英语第二册 14课 文档幻灯片.doc
- 第二篇 CPA管理.ppt
- 因材施教及面向全体学生关系问题研究摘要.doc
- 原电池电动势的测定实验报告.pdf
- 与业主、设计、总包、监理和他承包人的配合措施.pdf
- 公司管理流程.pptx
- 2024_2025学年新教材高中地理第1章地球的运动素养综合训练新人教版选择性必修1.doc
- 2024_2025学年新教材高中地理第3章大气的运动第1节常见天气系统第1课时锋与天气分层作业新人教版选择性必修1.doc
- 2024_2025学年新教材高中地理第1章地球的运动第2节地球运动的地理意义第4课时正午太阳高度的变化四季更替和五带划分分层作业课件新人教版选择性必修1.pptx
- 2024_2025学年新教材高中地理第2章地表形态的塑造第2节构造地貌的形成第1课时地质构造与地貌课件新人教版选择性必修1.pptx
- 2024_2025学年新教材高中地理第1章地球的运动问题研究人类是否需要人造月亮课件新人教版选择性必修1.pptx
- 五片小雪花课件.pdf
- 2024_2025学年新教材高中地理第3章大气的运动第2节气压带和风带第1课时气压带和风带的形成分层作业课件新人教版选择性必修1.pptx
最近下载
- Beautiful Ireland and Its Traditions优秀教学课件.pptx
- 2023年第二届新晨杯_B题.pdf VIP
- 光储柴一体化供电系统应用调研及系统方案.ppt
- 毕业设计(论文)某机械加工车间低压配电系统及车间变电所设计.doc
- 火锅店安全管理制度解析.docx
- 机械制图习题集(多学时)第4版课后习题答案.pdf VIP
- 《祝福》《林教头风雪山神庙》《装在套子里的人》联读课件 统编版高中语文必修下册.pptx
- 2020-2021学年广东省广州市天河区七年级(下)期末语文试卷.doc VIP
- 彩钢板屋面除锈及防水工程施工方案.doc VIP
- 肺隐球菌病病人的护理.pptx
文档评论(0)