服务热线:
您当前的位置:首页 > 世纪星月刊 > 第9期 (2011年9月)

【技术前沿】大话COM 技术的前世今生

2011/10/20 10:33:59

 

研发部 杨盛海

 

  COM技术就像一瓶老酒,历久而弥香,对于七零后以及大多数的八零后程序员来说,COM架构无疑是近二十年来最优秀的编程结构,其与面向对象编程的思想的契合程度之深人所共知。同时COM技术也是神秘的,难以驾驭的,就像一台难以使用的机器。然而,当你深谙COM内部的思想之后,就会带来强大的底层扩张能力。
COM技术本身只是一种编程思想,但是它所扩展出来的技术却无一不是如雷贯耳:OLE、ActiveX、DirectX都是COM技术直接派生的产物,至于今天Windows下大行其道的.net平台都影影绰绰闪现看COM的影子。
  对于COM技术,大多数沉迷其中的同仁都会有说不完的编程体会以及对这种技术本身的不同看法,然而对于COM技术的出现之前的早期,都有哪些需求活动以及开发思路促成这种惊天动地的思想出现,却没有几个人能说得上来,本人根据网络信息和长久以来对这门技术肤浅的研究来略述一二,由于来源不具备权威性,所以广大读者仅可当作野史来看,切不可写入论文引参列,切记!

 

 

故事之一:复合文档


  话说早些年间,微软弄出来一套办公软件,还是比较早期的版本,其竞争力还远远比不上当时主流的字处理软件和电子表格软件。为增加竞争力,微软的决策者们想通过文档嵌套的方式来打包销售办公软件。文档嵌套,也就是我们所说的复合文档,由于当时市面上的办公软件功能都比较单一,做字处理的,只做字处理,做表格的只做表格。微软就想,能不能发明一种技术,使得在字处理软件中可以嵌入电子表格,或者在电子表格中嵌入一些矢量图形,这样不就比那些只具备单一功能的文档软件强很多,不就有希望将那些产品挤出市场?这种动机直接产生了OLE技术(对象链接与嵌入技术)。
  当然,这一过程也颇费周折,遇到无数技术难题,仅仅文档的存储这一项就进行一些彻底的变革,改变过去单一的文档结构,使用一种叫做结构化的文档结构,大体的意思是将文档分成一块块,每一块的数据都可以用不同的软件来处理,比如一块是文字块,由Word来处理,下一块是表格块,需要由Excel来处理,这样就可以把需要由不同软件来处理的数据放到同一个文件中。后来这种文档的处理产生了OLE技术,也就是COM技术的前身,或者严谨一点来说,COM技术是由OLE技术抽象而来。
早期有一本厚厚的介绍OLE技术的大书,通篇讲OLE技术的实现细节,只字未提COM技术,这本书目前已经绝版,因为没有几个人有耐心看完这本书。而能够看完这本书,并且看懂的人,都成了大牛。

 

 

 

故事之二:VBX与接口


  再说到微软在开发可以处理复合文档的Office软件时,微软的一些领导提到一项匪夷所思功能,就是在Word中不仅可以处理现有Office单体软件所产生的文档,比如说Excel,而且可以处理将来开发的软件所产生的文档。这令所有人都觉得不可思议,这里面也包括Office项目的负责人。他个人觉得,连未来的软件是什么样子都不知道,怎么可能由现在的软件去调用未来的软件所产生的文档。
  就这样,Office项目陷入了停滞。天无绝人之路,有一次该负责人与VB项目的负责人在谈话中获得灵感,VB项目的负责人使用一种函数规约,用以充实VB界面的工具栏,任何人根据这种函数规约都可以开发出自己的界面,并放到VB的工具栏中使用,就好像他们扩展了VB一样。这种技术就是当时的VBX,当时这种技术并不被微软的各界人士看好,甚至包括发明这种技术的VB负责人自己。然而令人大跌眼镜的是,成千上万的VB爱好者使用这种技术来做自己的VB工具栏,并把成果放到互联网上供大家使用,造就了后来VB的传奇,甚至当时中国大学工科专业都把VB当作必修课程来学。
  回过头来看下VBX有哪些神奇之处,VB项目的负责人说这些函数规约无非是规定几个标准函数:初始化、显示、消息传递……所有想制作工具栏的人必须在自己的程序里实现这几个函数,以供VB的本体程序调用。
一语惊醒梦中人,Office项目的负责人一下子就想到C++中想对应的概念,规约函数在C++中就可以做成虚函数,去让未来的软件实现,而在现在的软件中去调用。VBX中只有那么几个函数,而Office项目中却有很多这样的函数,需要把它们分类封装到不同的纯虚类中,每一个纯虚类封装一类这样的纯虚函数。这便是接口的前身!而接口技术则是COM结构的核心概念。
  在经济学领域有这么一句名言:金银天然不是货币,而货币天然是金银。用到这里则成了:COM天然不是为C++准备的,而C++天然是为COM准备的。就这样C++领域和VB领域的两个牛人一次偶然的谈话催生了COM的核心技术,这无疑又增加了COM技术的迷人色彩。
  当年,随着COM技术的发展,微软也从中派生成很多经典的技术,包括ActiveX和DirectX,前者使得在互联网技术盛行的今天,微软也没有落后太多,后者也在图形处理、3D动画、音频视频等领域占有不可取代的地位。在开发领域,由COM技术引申出来的.net平台更是成为Windows下程序开发的主流工具。
  任何技术无论多么牛,也不是放之四海而皆准的真理,COM技术也有它显然的缺点,它是在Windows下提出来的,它的思想是跨平台的,但是目前的实现上,它并没有走好跨平台那一步,因此,在移动通信日渐发展为主流软件平台的今天,COM开始落后。再者,它还是太复杂,大多数开发成员,包括个人和企业都掌控不好它,这些人更青睐于简单、快捷的java、以及javascript等语言,以及它们背后方便易用的类库。
  总之,方便、快捷、简单成为今后开发群体所看中编程语言的优良属性。因此,如果微软无所作为的话,COM被淘汰则是历史的必然,今天,市面上已经很难看到新出的有关COM的书了。

 

 


企业邮箱  |  法律公告  |  隐私保护  |  联系我们  |