第三章 类
2004-09-16 11:19
190 查看
再谈接口与实现
接口:对象进行通信的抽象协议.
实现:支持一个或者多个接口的具体数据类型.
类:被命名的实现.它代表了具体的可实例化的类型,称为COM类或coclass
CLSID用来命名实现,COM也支持文本方式的别称ProgID, 利用一组COM API可实现相互转换
类对象
所有COM类的一个基本要求是它们必须有一个类对象.(类厂)对于每个类来说,类对象是独一无二的,它实现了该类的创建功能.
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
激活
三种激活模型: 绑定到类对象(必需),绑定到类实例,绑定到来自文件的永久实例SCM是一台机器上所有激活请求的中心控制点.凡是支持COM的每台主机上都有本地的SCM,由它远程激活请求转发给远程机器上的SCM,在远程机器上这个激活请求将被当作本地激活请求来对待.
SCM只被用于激活对象和绑定初始接口指针,一旦一个对象已经被激活,SCM就不再介入客户与对象之间的方法调用过程中.
SCM由RPCSS实现
对象被激活在客户进内部时,实现对象方法的DLL将被装载到客户进程中,这使方法调用非常高效.
对象在另一个进程中(本地或者远程)被激活时,实现对象方法的代码将在服务器进程中执行对象所有数据成员都驻留在服务器进程地址空间中,COM在激活时透明地返回客户一个代理对象, 运行在客户线程中, 把方法调用翻译成实际对象上的方法调用
使用SCM
层次结构: 绑定到类对象(必需,最底层) <- 绑定到类实例 <-绑定到来自文件的永久实例COM API coGetClassObject()得到类对象,再使用类对象得到对象.
类与服务器
COM记录了一个配置数据库(NT目录), COM使用类存储(COM类的信息)把CLSID解析到实现文件名注册表相关:DllRegisterServer , DllUnregisterServer
DLL引出DllGetClassObject,供coGetClassOjbect调用
一般化
用于对象发现的接口: IoleItemContainer用于对象创建的接口: IclassFactory
优化
COM API: CoCreateInstanceEx包含了CoGetClassObject和IClassFactory::CreateInstance的功能.客户不会看到类对象,QueryInterface在类对象内部进行,提高了性能
且允许客户请求多个指向新对象的接口指针
相关文章推荐
- 零起点学习WPF之《WPF揭秘》读书笔记(8)——第三章 属性值继承
- 鸟哥的Linux私房菜(服务器)- 第三章、局域网络架构简介
- 第三章 A代码
- 高等数学:第三章 微分中值定理与导数的应用(2)函数单调性 极值 最大值 最小值
- 走向.NET架构设计—第三章—分层设计,初涉架构(前篇)
- 线性代数:第三章 矩阵的初等变换与线性方程组(2)线性方程组的解 初等方阵
- 《学习opencv》第三章习题第3题,第4题
- 第三章 Android控件架构与自定义控件详解
- 《Lucene In Action》第三章.搜索
- .net架构设计读书笔记--第三章 第10节 命令职责分离(CQRS)简介(Introducing CQRS)
- 陆其明DirectShow 实务精选 中 第三章 avchat 图像不能显示...
- 《集体智慧编程》 第三章 发现群组 学习笔记
- 《C++标准程序库》学习笔记1--第二章&第三章
- 《学习javascript数据结构与算法》——第三章:栈
- 第三章 string类
- 课本第三章
- C语身教程第三章: C言语次第计划开端(5)
- 第三章 进程管理笔记
- TCPL(The C Programming Language)读书笔记 第三章 流控制
- [HeadFirst-HTMLCSS学习笔记][第三章创建网页]