- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
构件对象模型COM.ppt
构件对象模型:COM; 内 容
基础部分
综述
接口
实现
高级部分
包含与聚合
COM与VC
自动化
DCOM ;(1) COM的起源
源于OLE: Object Link and Embedding
OLE1 采用DDE(Dynamic Data Exchange)
在不同的程序之间进行通信
DDE缺点: 效率低,稳定性不好,使用不方便
COM是为克服上述不足而出现的
OLE2 以 COM 为基础
但OLE未能体现COM优点
;(2)什么是COM
构件对象模型:Component Object Model
客户与构件为了能够互操作而遵循的标准
COM标准包括规范与实现两部分
规范部分定义了构件之间的通信机制
这些规范不依赖于任何特定的语言
和操作系统
实现部分即COM库
为COM规范的具体实现提供一些核心服务
;(3) COM构件;(4) COM库 (COM Library)
功能:
(1)实现客户方与服务器方COM应用的创建过程
(2)COM通过注册表查找本地服务器(即EXE程序)
以及程序名与CLSID的转换
(3)提供标准的内存控制方法
DCOM的实现提供了分布式环境下的通信机制
在操作系统层次
以DLL文件的形式存在
;(5) COM特性
语言无关性
为跨语言合作开发提供了统一标准
并得到不同集成开发环境的支持
进程透明性
进程内服务程序: DLL
本地服务程序: EXE
远地服务程序: DLL或EXE
实现进程透明性的关键是COM库
它负责服务体的定位
管理对象的创建及对象与客户之间的通信
复用性
包含方式
聚合方式;(6) COM发展趋势
操作系统
成为系统的基本软件模型
数据库
OLE DB/ADO 以 COM 的方式
为数据访问提供一致的接口
Internet
ActiveX包含了所有基于COM的Internet相关技术
COM+
增加MTS等服务;2 COM接口;Vtbl指针;Vtbl的作用:提高接口实现的灵活性;两个实例 共享同一Vtbl:; 接口特点
实现级
二进制,独立于编程语言
稳定性
客户与服务器依赖于接口
继承性
便于扩展接口, 不提倡继承
所有接口皆继承Iunknown)
多态性:;(1)功能
提供: 生存期控制
接口查询
IUnknown的定义(IDL):
interface IUnkown
{
virtual HRESULT QueryInterface(
const IID, void **ppv) = 0;
virtual ULONG AddRef() = 0;
virtual ULONG Release() = 0;
};Vtbl指针;IUnknown指针的获取
IUnknown * CreateInstance();
创建构件时,客户可以使用CreateInstance,
而不是new。
CreateInstance的定义:
IUnknown * CreateInstance()
{
IUnknown * pI = static_castIX * (new foo);
pI - AddRef();
return pI;
}
;(2)引用计数
AddRef与Release
控制构件的生命期
解决内存管理问题
使构件能够自己将自己删除
使用规则
返回接口指针之前调用 AddRef;
使用完接口之后调用Release;
赋值之后调用AddRef;;;(3)接口查询;QueryInterface的实现
假定存在类 CA,继承接口 IX 与 IY:
HRESULT _sfdcall CA:: QueryInterface(const IID iid, void ** ppv){
if (iid == IID_IUnknown) {
*ppv = static_castIX *(this);
}
else if (iid == IID_IX) {
*ppv = static_castIX *(this);
}
else if (iid == IID_IY) {
*ppv = static_castIY *(this);
}
else {
*ppv = NULL;
return E_NOINTERFACE;
}
您可能关注的文档
最近下载
- 随班就读学生基本情况表.doc
- 小学六年级数学下册第三单元大单元教学设计圆柱与圆锥.docx
- 2024年福建省高三数学2月模拟大联考试卷附答案解析.pdf VIP
- 最新国家开放大学电大《办公室管理》期末试题标准题库及答案(试卷号2180).pdf
- 2024年第五届“红旗杯”班组长综合技能知识大赛考试题库及答案(通用版).docx VIP
- 什么是修复型胶原蛋白、修复、全球修复型胶原蛋白新肌饮.docx VIP
- 护理工作坊的开展.pptx VIP
- 护理工作坊开展.ppt VIP
- 赵建勇 政府与非营利组织会计(第5版)2020-第3章财政总预算会计的资产练习题答案5.docx VIP
- 京瓷哲学手册(正确版).pdf
文档评论(0)