第三章 类

再谈接口与实现

 

接口:对象进行通信的抽象协议.

实现:支持一个或者多个接口的具体数据类型.

:被命名的实现.它代表了具体的可实例化的类型,称为COM类或coclass

CLSID用来命名实现,COM也支持文本方式的别称ProgID, 利用一组COM API可实现相互转换

类对象

所有COM类的一个基本要求是它们必须有一个类对象.(类厂)

对于每个类来说,类对象是独一无二的,它实现了该类的创建功能.

激活

三种激活模型: 绑定到类对象(必需),绑定到类实例,绑定到来自文件的永久实例

SCM是一台机器上所有激活请求的中心控制点.凡是支持COM的每台主机上都有本地的SCM,由它远程激活请求转发给远程机器上的SCM,在远程机器上这个激活请求将被当作本地激活请求来对待.

SCM只被用于激活对象和绑定初始接口指针,一旦一个对象已经被激活,SCM就不再介入客户与对象之间的方法调用过程中.

SCMRPCSS实现

对象被激活在客户进内部时,实现对象方法的DLL将被装载到客户进程中,这使方法调用非常高效.

对象在另一个进程中(本地或者远程)被激活时,实现对象方法的代码将在服务器进程中执行对象所有数据成员都驻留在服务器进程地址空间中,COM在激活时透明地返回客户一个代理对象, 运行在客户线程中, 把方法调用翻译成实际对象上的方法调用

使用SCM

层次结构: 绑定到类对象(必需,最底层) <- 绑定到类实例 <-绑定到来自文件的永久实例

COM API coGetClassObject()得到类对象,再使用类对象得到对象.

类与服务器

COM记录了一个配置数据库(NT目录), COM使用类存储(COM类的信息)CLSID解析到实现文件名

注册表相关:DllRegisterServer , DllUnregisterServer

DLL引出DllGetClassObject,coGetClassOjbect调用

一般化

用于对象发现的接口: IoleItemContainer

用于对象创建的接口: IclassFactory

优化

COM API: CoCreateInstanceEx包含了CoGetClassObjectIClassFactory::CreateInstance的功能.

客户不会看到类对象,QueryInterface在类对象内部进行,提高了性能

且允许客户请求多个指向新对象的接口指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值