分享
 
 
 

COM 之 com 初谈

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

com初谈

先请看看下面几个问题:

l 什么是com ?

l 什么是com对象?

l 什么是接口?

先说第一个,com全称是组件对象模型(compoment object model),他是一组规范,是MicroSoft创建的一组二进制和网络标准,用于解决两个组件之间的通信,可以说MicroSoft目前差不多所有的战略都是建于其上,从1993年com 首次被推出,他就注定了MicroSoft的发展的命运……

什么是com对象

com是面向对象的软件模型,com对象的概念有点类似于C++中对象的概念。在com规范中,没有com对象的严格定义,com组件提供给客户的是以对象形式封装起来的实体,客户与组件交互的实体是com对象。

com对象有自己的属性和方法,但这些都被com封装了起来,客户只有通过接口才能对com的方法进行调用,接口是com与外界通信,交互的唯一途径。

什么是接口

上面已经说过了,接口就是com 与外界通信的唯一途径。他的定义是com规范的核心。接口是一组逻辑上相关的函数的集合,他自己可以看作是指向改组函数集合的指针。

下图表示了接口和com对象的关系:

由上图可见一个com组件主要由两部分组成,一部分是接口的定义,另一部分是com对象的实现,在com规范中接口的定义和com对象的实现是相对独立的。

接口的定义 ——接口的定义遵循MIDL,他是MicroSoft针对OSF的DCE(Distributes Computing Enviroment)规范中IDL语言扩展。从上图可以看出,接口就是包含了一组函数的数据结构,他只负责定义函数。在对象创建后,他就是包含了接口指针和一个虚函数表,接口指针指向虚函数表(该函数表就成了一组函数指针的集合),每个函数指针指向“com对象实现”里相应的函数的实现。接口规范并不建立在任何编程语言基础上,任何具有足够数据表达能力的语言,都可以对接口进行描述。

com对象的实现 —— 包含com对象的所有接口的所有函数的实现代码。

COM整体模型

根据com规范所建立的应用是基于Client / Server 模型的,一个完整的com应用包括以下几个部分:com服务器,服务器方com库,客户方com库,客户程序。

先对各个部分作个简要说明:

com服务器 —— 就是一个容器,此容器用来装所有的com对象

服务器方com库 —— 可以看作是容器的管理者,负责从容器中找出相应的com对象,创建

对象的实例。

客户方com库 —— 连接员,负责把客户请求传送到服务方,负责客户com的控制管理

客户程序 —— com服务的享受者。

一次完整的方法调用包括以下几个步骤:

1. 客户程序通知com库,向com库指出他要调用的com对象的GUID或IID;

2. 客户端com库接受客户要求,向服务器端发送该要求,在客户进程内建立该com对象的代

理DLL(以后客户就同该代理DLL交互)。

3. 服务器com库接受请求,从com库中找出com对象,建立该com对象的实例(组件进

程),在实例建立时,还会在实例的进程里,创建一个存根dll。组件程序通过该存根

dll与客户端的存根dll进行交互。

4. 客户程序调用代理dll接口方法;

5. 代理dll把请求接口、方法、参数、数据,打包列集(marshalling);发送给存根dll;

6. 存根dll接收来自代理dll的数据包,散集(Unmarshalling);发送给组件程序;

7. 组件程序处理数据,返回给存根dll;

8. 存根dll列集(marshalling),发送给代理DLL;

9. 代理DLL返回结果给客户程序。

[ 注:对于存根和代理,请关注后续文章 ]

com对象的创建

com库是如何创建com对象的呢?

通过类厂,类厂是com对象的生产基地,每个com对象都有一个相应的类厂。类厂本身也是一个com对象,他支持一个接口IClassFactory,该接口的函数CreateInstance(…)用于构造com对象的实例。

客户创建一个com的过程:

1. 客户向com库,给出com对象的GUID;

2. com库调用CoGetClassObject(...)函数获取com对象的类厂,创建com对象.

CoCreateInstance(...)函数,也是通过在其内部调用CoGetClassObject(…)函数来获取类厂,创建对象的。

暂时就到这吧,各位老兄,老姐,如发现有误,或不同观点,还望指出,共同讨论,共同提高啥!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有