浅析COM的思想及原理(2)

2016-01-29 19:48 5 1 收藏

浅析COM的思想及原理(2),浅析COM的思想及原理(2)

【 tulaoshi.com - ASP 】

  三、COM中的几个重要概念

  1、组件:

  其实只要你仔细阅读了前面的部分,组件的概念应该已经很清楚了。这里所说的组件,就是前面反复在讨论的所谓“模块”。现在我只想强调一下组件需要满足的一些条件。首先是封装性,组件必须向外部隐藏其内部的实现细节,使从外部所能看到的只是接口。然后是组件必须能动态链接到一起,而不必像面向对象中的class一样必须重新编译。

  2、接口:

    由于组件向外部隐藏了其内部的细节,因此客户要使用组件时就必须通过一定的机制,也就是说要通过一定的方法来实现客户与组件之间的通信,这就需要接口。所谓接口就是组件对外暴露的、向外部客户提供服务的“连接点”。外部的客户见不到组件内部的细节,它所能看到的只是接口,客户也是通过接口来获取组件提供的服务。这有点像OSI网络协议分层模型,每一层就像一个组件,它内部的实现细节对于其他层是不可见的;而每一层通过“服务接入点”向其上层提供服务,这就像这里所说的接口。一般来说,接口总是固定的,也是公开的。组件的开发人员要实现这些接口,而客户则通过接口获得服务。正是接口的这种固定和公开,才使得组件和客户能够在不了解对方的情况下达成一致。

  3、客户:

  这里所说的客户不是指使用软件的用户,而是指要使用某一个组件的程序或模块。也就是说,这里的客户是相对组件来说的。

  四、COM的实现原理与雏形模拟

  COM编程的一个重要特点就是要模块化,说得具体一些,就是要将客户和组件分隔开来,而客户和组件之间又是通过接口来通信的。下面,我就介绍一下COM是怎样将客户与组件分隔开来,又是怎样利用接口来实现客户与组件间的通信的。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

  首先我要讲讲接口。COM中的接口实际上是一个函数地址表,当组件实现了这个接口后,这个函数地址表中就填满了组件所实现的那些接口函数的地址。而客户也就是通过这个函数地址表获得组件中那些接口函数的指针,从而获得组件所提供的服务的。从某种意义上说,我们可以把接口理解为c++中的虚拟基类;或者说,在c++中可以用虚拟基类来实现接口!这是因为COM中规定的接口的存储结构,和c++中的虚拟基类在内存中的结构是一致的。其存储结构如下图:  
 
                                         虚函数表
               vtbl指针------Fun1()指针--------
                                       Fun2()指针--------
                                       Fun3()指针--------
                                       …………
  
  Vtbl指针指向一个虚函数表,而这个虚函数表的表项就是指向这些虚函数的指针。

  接口有了,那么组件又是怎样实现接口的呢?实际上,如果用虚拟基类来实现接口,那么组件就是对这个虚拟基类的继承。大家知道,当某个类继承于一个虚拟基类的时候,它就要实现这个虚拟基类里声明的虚函数,这就正好与组件实现接口这一点相吻合。举一个例子来说明,有一个接口InterfaceA,组件ComponentB要实现这个接口,那么就可以这样用c++语言来描述:

//接口:
class InterfaceA
{
  virtual void Fun1()=0;
  virtual void Fun2()=0;
};
//实现了接口InterfaceA的组件:
class ComponentB: public InterfaceA
{
  virtual void Fun1()
  {
     printf("Fun1n");
  }
  virtual void Fun2()
  {
     printf("Fun2n");
  }
};

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

  而客户只需要得到一个指向ComponentB实体的InterfaceA指针就可以获得ComponentB组件的服务了:

//使用了组件ComponentB的客户:
……
ComponentB CB;
InterfaceA *pIA=&CB;  //获得指向ComponentB实体的InterfaceA指针,以下客户就可以只通过接

来源:http://www.tulaoshi.com/n/20160129/1510145.html

延伸阅读
很多女性朋友可能都有使用过护理液的经历,护理液的作用和原理可能大部分女性朋友并不是特别了解。对护理液的分类及使用方法,可能很多女性朋友也不是特别在意。不同女性人需要选择不同的护理液使用的,每种不同的护理液的功效也是不同的。 护理液作用及原理 女性护理液是女性朋友日常使用的一种私密处的护理产品。护理液主要功...
标签: ASP
一共4个页面:form.asp; chk.asp; num.asp; count.asp 得到一个随即数字。加密! 解密后成成XBM图片 利用session 判断 form.asp <% '### To encrypt/decrypt include this code in your page '### strMyEncryptedString = EncryptString(strString) '### strMyDecryptedString = DeCryptString(strMyEncryptedString) '### You a...
标签: SQLServer
【导读】本文浅要分析了三种数据库SQL Server与Oracle、DB2在使用和性能等方面的差异,供参考。 开放性 SQL Server 只能在Windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且Windows平台的可靠性,安全性和伸缩性是非常有限的。它不象...
中医治疗甲亢 中医治疗甲亢的原理及好处 患有甲亢危害的不仅是自己更是身边的亲人,甲亢患者除了平时的基本调养外还可以适当的选择中医治疗,中医对于治疗甲亢有着很好的帮助。下面图老师小编将告诉大家甲亢的危害及中医治疗甲亢的好处。 人们都希望自己能够健康快乐的生活,但人生不如意十有八九,当甲状腺结节的出现...
标签: 生活常识
洗衣机的组成及工作原理   洗衣机的组成及工作原理: 洗衣机一般由电机、离合器、控制板、内外桶、箱体组成。一般来说它的工作原理可理解为:由电机把电能转变为机械能,通过皮带带动内桶,靠内桶的摔打、揉搓、雨淋、浸泡、抖散,即化学力、机械力来净化衣服。 普通单桶洗衣机工作原理:它是由定时器控制电机,并通...

经验教程

570

收藏

18
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部