COM的结构

来源:互联网 发布:安知我意百度云 编辑:程序博客网 时间:2024/05/17 03:24


一.COM的对象与接口

COM(component object model)也即对象组件模型,他的杰出代表是OLE(object linking and embedding)对象链接和嵌入。COM主要有三种类型,组件,COM对象和接口,这三种的关系是组件可以包含多个COM对象,一个COM对象包含多个接口,先介绍下COM对象就是符合COM标准的对象,换句话说,就是继承IUnknown的对象,接口呢,顾名思义就是纯虚类,但是该类应该继承IUnknown接口,说来舞无趣,所以图示如下:

那么我们是怎样进行区别COM对象和借口呢,这就需要借助GUID了,全局唯一标示符,也就是说每一个对象和接口都有这样一个标识符,只是对象的GUID又称之为CLSID(类ID)来决定该标识符的唯一性,这样,我们在获得组件时就可以根据GUID来唯一的获得该对象了,另外,获得过程应该是在注册表中查找该GUID,然后改注册表项中一般会有该dll,或者该exe文件的绝对路径,这样,我们就知道了,该对象的加载和调用方法了。,获得对象之后,就可以获得该对象的接口,也就获得了服务,所以我们可以看出来,客户最终要打交道的是接口。

二.COM库

COM库一般不实现在应用程序层,只是在操作系统层次上有所体现,因此一个操作系统只有一个COM库,而且COM库的实现必须依赖于操作系统的限制,尤其是操作系统底层的标准

三.语言无关性

   COM规范的定义并不是依赖于某种编程语言,二是依赖于二进制代码级别的,换句话说,就是只要符合COM标准写成的可执行文件可以被其他语言进行调用

四.进程透明性

   COM所提供的进程模型主要有两种,一种是进程内模型,另一种是进程外模型

进程内的服务模型,是指服务程序是一个dll它运行在客户进程的进程空间内。这样的好处是执行的效率比较高,但是稳定性稍差,一旦服务dll出现问题整个进程就会奔溃,

另外一种是进程外模型,他如果是本地机器上的进程,那么则会是一个exe文件,如果是远程机器上的那么既可以是一个dll文件,也可以是一个exe文件,如果是以dll形式存在的则会创建一个代理进程。

五.创建过程

   COM库负责装入组件模块,或者启动组件进程,,如果客户指定的进程在远程机器上的话,两台机器上的COM库会协调完成COM对象的创建工作,并在客户进程中创建一个代理对象,也就是说,我们根本不需要了解RPC的过程调用。很是减少了我们的工作量

 

0 0
原创粉丝点击