微软软件开发技术二十年回顾-COM、OLE、ActiveX及COM+篇

本文摘自:http://www.job168.com/info/read_100394.html

微软的许多技术,如OLE、ActiveX、以及DirectX等都是基于COM技术而建立起来的。微软本身也大量地使用COM组件来定制他们的应用程序及操作系统。那么,什么是COM呢?

  所谓COM即“组件对象模型”,是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。开发COM的目的是为了使应用程序更易于定制、更为灵活。

  其实,COM不是以一个单独的开发过程的一部分出现的。相反,它最初是以对象及嵌入系统的形式产生于Windows 3.0。我们知道,OLE 1允许一个应用程序(如WORD或EXCEL)可以不必打开第二个应用程序就能显示其它应用程序的数据。但OLE 1还存在两个局限:

  ·首先是嵌入的数据不能被应用程序所编辑;

  ·其次,没有标准化的系统用于存放嵌入的信息。

  于是,出现了OLE 2,OLE 2是与WINDOWS 3.1一起推出的,它是第一个真正的COM技术,而OLE 1还不具备COM的各项特性—它使用的是另一种技术体系。OLE 2中产生了一种新的唯一的数据格式,称为复合文件。这种文件中能够包括所有OLE支持的应用程序的相关信息,并在任一工作的应用程序中支持编辑、更新、打印等功能。

  但OLE 2仍然存在一些局限性,最为明显的是任何时候要对一个嵌入的数据进行编辑都得重新打开一个窗口。对这一点的改进,生成了OLE的一个新版本,称为OLE自动化。该技术除了允许在调用数据的应用程序内部进行编辑(称为内部编辑),还在OLE 2的基础上加入了其它两项与COM技术相关的改进;一是提供了非C++开发程序(如VB程序)接入COM功能的能力;二是支持存在于复合文件以外的基于COM技术的部件的创建。Windows 3.11全面支持自动化技术。

  虽然,这最后一次的技术改进给COM带来了最持久的冲击,但是COM的OLE实现并仍然没有实现Bill Gate先生的部件化软件的梦想。随之而来的另一技术革新却通过从未想过的机制—VBX控件使之变成了现实。VBX是Visual Baisc开发环境的一些内带工具,最早由C++开发,后来却都是用VB自己开发的。VBX是一类DLL应用程序,具有特殊的支持以便可以在VB系统中使用。在一年左右的时间内,VBX控件的市场迅速发展成为一个几百万美元的产业,并带动了VB产品的销售。VBX具有两项以前的自动化服务器所不具备的重要性质:用户接口和它与客户(容器)的通信能力。

  VBX的这种出乎意料的成功让微软决定让COM工作组在自动化基础上增加等效于VBX的性能。这一开发过程的结果就是OCX控件(是一种特殊的自动化DLL服务器),它采用COM技术支持VBX控件的所有功能,而且它从此升级为32位的控件。可惜,在OCX尚未来得及普及以前,因特网和Java的出现使它们被重新改造成了ActiveX控件。

  当时,没有谁会预料到Java和Internet会在WWW领域以氢弹的威力在计算机领域爆炸。微软长期以来一直认为他们在PC机软件领域的垄断是无可挑战的,但是Java和网页浏览器伴随着Internet,以一种全新的方式进入到个人微机的软件领域,且该领域由Sun和Netscape控制而不是微软。作为迎击,COM变成了ActiveX,复合文件变成了ActiveX文件,OCX控件变成了ActiveX控件等等。基于COM的ActiveX组件均根据Internet的特点增加相应的新特征,如保密安全性能、代码短、数据支持异步下载。同时,ActiveX组件还具有如下特点:

  ·ActiveX在自动化服务器上增加了用户接口;

  ·通用属性和属性页机制使ActiveX控件的行为标准化;

  ·连接点机制支持从ActiveX控件向容器发送事件;

  ·ActiveX的持续性解决了越时的状态存储问题。

  总之,OLE1、OLE2、OLE自动化、VBX控件、OCX控件、ActiveX以及COM+都是COM概念在Windows操作系统的各种实现方式。如今,COM已成为微软产品系列的核心组成技术:

  ·Internet Explorer 4网络浏览器支持所有的ActiveX控件,实际上它正是采用了一个ActiveX组件用于它的显示接口;

  ·Windows 98这种新版的Windows操作系统将IE与操作系统捆绑在一起,它基于COM技术并支持活动桌面,使桌面部件具有网络应用的功能;

  ·Internet信息服务器(IIS)是微软加入网络服务器大战的重量级武器,IIS包括很多的功能强大的基于COM技术的系列内容,如Active Server Page,ISAPI扩展和ISAPI过滤器;

  ·微软事务服务器(MTS)是一种面向数据库的系统,MTS采用COM技术以支持多种数据库系统和售货机的混合事务处理,并仿造非数据库的执行方式,将事务的处理变成单步的行为,其结果可以为“成功”、“失败”和“返回”而不会因为处理失败而丢失数据;

  ·OLE DB推回到COM的OLE 2技术上,它采用与ODBC数据库相同的技术,支持非数据库应用程序与面向数据库的技术(如MTS)共同工作。

  从另一方面看,最初,Windows是利用DLL在二进制级实现代码共享的。这也是Windows程序运行的关键——重用kernel32.dll,user32.dll等。但DLL是针对C接口而写的,它们只能被C或理解C调用规范的语言使用。由编程语言来负责实现共享代码,而不是由DLL本身。这样的话,DLL的使用受到限制。尽管在后来,MFC又引入了另外一种MFC扩展DLL二进制共享机制,但它的使用仍受限制——只能在MFC程序中使用。

  COM通过定义二进制标准解决了这些问题,即COM明确指出二进制模块(DLL和EXE)必须被编译成与指定的结构匹配。这个标准也确切地规定了在内存中如何组织COM对象。COM定义的二进制标准还必须独立于任何编程语言(如C++中的命名修饰)。事实上,COM正是充分利用了Win32 DLL的灵活性才得以真正在Windows平台上实现的。COM的发布形式是:以win32动态链接库(DLL)或者可执行文件(EXE)的形式发布的可执行代码组成。

  注意,COM本身也要实现一个称为COM库的API,由该库提供诸如客户对组件的查询,以及组件的注册/反注册等一系列服务。一般来说,COM库由操作系统加以实现,程序员不必关心其实现细节。

  【注】DirectX技术

  要在Windows平台上进行游戏开发必须了解两个重量级游戏API:DirectX和OpenGL。其中,DirectX是微软开发的专门用于优化游戏制作的API。DirectX由很多组件组成:DirectDraw、DirectSound、DirectMusic、DirectPlay、Direct3D、DirectInput、DirectSetup。它是允许你直接控制计算机硬件设备的软件,它比Windows GDI要快好几倍,可用于不同的语言和多种平台,支持从绘制象素到高级3D图像,从播放简单声音到数字音乐,从键盘控制到反震手柄……几乎为你的游戏开发提供了所需的一切。注意,DirectX的基础正是COM技术。

  什么是COM+?

  必须明确,COM+并不是COM的简单升级,但它的底层结构仍以COM为基础,COM+综合了COM、DCOM和MTS这些技术要素,把COM组件软件提升到应用层而不再是底层的软件结构,它通过操作系统的各种支持,使组件对象模型建立在应用层上,把所有组件的底层细节留给操作系统;因此,COM+与操作系统的结合更加紧密。下图3展示了COM+与MTS、COM/DCOM的关系。

  图3.COM+与MTS、COM/DCOM的关系

  另一方面,COM+不再局限于COM的组件技术,它更加注重于分布式网络应用的设计和实现。COM+继承了COM几乎全部的优势,同时又避免了COM实现中的一些不足,把COM、DCOM和MTS的编程模型有机地结合起来,继承了它们的绝大多数特性,在原有的特性上增加了新的功能:

  ·真正的异步通讯。

  ·事件服务。

  ·可伸缩性。

  ·可管理和可配置性。

  ·易于开发。

  COM+标志着微软的组件技术达到了一个新的高度,它不再局限于一台机器上的桌面系统,而是把目标指向了更为广阔的企业内部网,甚至国际互连网。COM+与多层结构模型(Windows DNA结构,详见下一节)以及Windows操作系统为企业应用或Web应用提供了一套完整的解决方案。

  【问题】.NET时代,COM是否会消失?

  不会。其实,.NET只不过是COM的别名而已。对于一个经验丰富的C++程序员而言,.NET就是COM的进化,而微软内部.NET可以说是“COM 3.0”。其实,CLR就是一个不折不扣的COM对象。但是,请注意,.NET使用一种不同的方法来编写组件,这样.NET组件与原先的COM组件存在明显的不同。.NET组件不需要使用注册表和类型库,因为所有关于组件的信息都以元数据的形式包含在程序集(Assembly)中。但是,借助于一个称为COM Interop的工具,COM对象和.NET对象可以很好地协作:通过提供软件包类,.NET对象可以访问COM对象;通过提供所有的注册表项和COM对象构建机制,COM对象可以访问.NET对象。

时间: 2024-09-27 18:37:14

微软软件开发技术二十年回顾-COM、OLE、ActiveX及COM+篇的相关文章

微软数据开发技术

微软数据开发技术的前世今生 (Microsoft Data Development Technologies: Past, Present, and Future) 在过去的20多年时间里,微软开发了许多的数据访问方案,这里回顾下这些技术的发展历程. 在1990s,微软主要提供两个数据库产品:Access和SQL Server.Access作为一个桌面数据库,提供了数据的一个表格形式的开发界面,用户完全不用担心和数据库的交互机制,Acceess把这些都做好了,这为许多简单的应用提供了便利.但是,

软件开发技术基础复习要点

软件开发技术基础复习要点 1.生存周期: 指一个软件从提出开发要求开始,经过需求分析.设计.制造.调试.使用.维护,直到软件产品被淘汰为止的整个过程. 2.简述软件工程的基本原理: 用分阶段的生命周期计划严格管理: 坚持进行阶段评审: 实行严格的产品控制: 采纳现代程序设计技术: 结果应该能清楚地审查: 开发小组应小而精: 承认不断改进软件工程实践的必要性. 3.简述产生软件危机的原因和解决办法: 原因:开发软件所需的高成本与软件产品的低质量之间存在尖锐的矛盾,致使软件开发陷入循环之中,即研制软

微软平台开发技术蓝图

近期项目面临技术选型,忙里偷闲画了一幅微软平台开发技术蓝图.因为时间有限,还有非常多不完好的地方,分享出来.仅仅是希望能给须要的朋友一些參考(没有时间写相关的介绍也没有时间回复评论.所以就不发在首页了).

2018年四川理工学院软件工程考试大纲(面向对象的软件开发技术概述)

2018年四川理工学院软件工程考试大纲(面向对象的软件开发技术概述)   1.面向对象软件开发,需要建立哪三种模型 ①.对象模型(用于描述系统的数据结构,定义了系统"对谁做") ②.动态模型(定义了系统"何时做") ③.功能模型(定义了系统"做什么") 2.面向对象软件开发 对象是指生活中的具体事物,面向对象软件开发是指根据生活中具体的事物为基本单位所进行的软件开发 3.面向对象软件开发的过程 面向对象分析(OOA).面向对象设计(OOD).面向

学习软件开发技术需要注意什么?

现在网络时代已经脱不开计算机,在智能化的时代掌握软件开发技术是必不可少的,因为这个行业是比较有发展前途,选择岗位空间大,缺失很多这样的人才. 随着互联网的急速发展趋势,传统的行业结构开始不断推进,选择的行业将有许多缺失的软件开发岗位,学习更多的更深层次的软件开发技术是随着时代不断推进的选择. 那么在学习软件开发技术上有什么注意的呢?中安云城为大家分析一下: 1.掌握软件开发技术的知识,以及各方面的实用性,掌握了最基础的知识外,将软件开发的门槛不断提升,这样对自己的成长帮助才会比较有效果,一个软件

京东价格监控软件开发技术探讨七:如何获取京东商品评价信息

在购买商品的时候,这个商品质量怎么样.价格贵不贵.商家服务态度好不好?这些问题往往是购买者急需知道的信息. 京东平台提供了商品评价功能,能够让购买者通过其他购买者的反馈来决定自己到底买不买这个商品. 项目组在对"杀京东"程序进行需求调研时,认为提供商品的评价尤其是差评信息,对购买者非常有指导意义,能加强用户的操作体验.此时,如何获取京东商品的评价信息成为项目组的首要任务. 首先还是先上神器Fiddler,通过它来获取到访问地址. //差评 http://club.jd.com/prod

有关微软新一代开发技术ASP+的介绍

[译者注]在本文中,作者提出了使用k-means算法来对图像进行色彩还原,介绍算法的步骤,同时应用在图像上,通过对比还原前后的图像,来证明k-means算法的有效性.以下为译文: k-means是机器学习中最著名.最广泛使用的算法之一.在这篇文章中,将使用k-means算法来减少图像上的颜色(但不减少像素),从而也减少了图像的大小.在这个领域不需要任何基础知识,因为可执行应用程序文件(大小为150MB,这是由于长时间的Spark依赖)已经提供了友好的用户界面.所以你可以很容易地用不同的图像来做实

微软开发技术发展

加个链接:微软软件开发技术二十年回顾(转):从win32到.net 要了解微软开发技术的发展,以及当前技术的整体结构,先区别以下名词 API 接口的变化 刚开始我就是分不清这个的,WPF / MFC / COM / .net傻傻分不清楚 这个主要是在Windows平台开发 编程语言 GUI 库 / 技术 MFC/QT/WPF/UWP .net/java VM机制,即时编译(JIT)跨平台 稍后再讲 API dos/win16 win32:时代 winFX COM组件技术 DNA:对应基于COM的

你真的适合做软件开发吗

前段时间一个朋友跟我说,他说做软件开发不仅累,而且从来不跟人接触,整天要对着电脑研究代码.整个人都完全脱离社会了,自己都快变成代码了. 我笑着以一个过来人的身份对他说,你现在后悔了吧?!天下没有后悔的药,若想不后悔,就必须对将来要做的事情有个了解,这就好比商人投资某个项目一样,必须做好深入的考察后,才能进入,否则就凭着一腔热情,失败在所难免. 软件开发行业曾一度被各大媒体报渲染我21世纪的昭阳产业,人才缺口达到多少多少等等.听的大家是蠢蠢欲动,摩拳擦掌恨不得卯足劲冲进去好好干一番事业.然后各种媒