一:概述
PC机自从诞生以来,硬件经历了无数变化,CPU从最初的INTEL 8086到
现在PIII满大街都是也只不过十几年。微软的WINDOWS操作系统从最初的
1.0版本到现在即将推出WIN2000,一直是桌面系统上装机量最大的OS。
作为软件开发人员,使用着包括Visual Basic,Visual C++,Delphi包
括最新的Borland C++ builder等等在内的众多开发环境为WINDOWS开发
应用程序。应该说现在的开发条件和若干年以前比已经是大大的进步了。
如果你开发过16位的WINDOWS程序,你可能知道为了读取一个文件,我
们不得不使用一小段汇编来调用DOS例程,或者使用当时WINDOWS尚未公开
的函数:_lopen()。在win32环境下,你所要做的全部是调用
: :CreateFile()来获得一个文件句柄,当然如果使用MFC或是OWL之类的
东西,你可以更简单的做到。不过一般情况下,程序员仍然不得不从头
开始写编写应用程序的每一行代码。
但这种情况得到了改变:微软提出了C O M(Component Object Model,
中文也可以译作"组件对象模型")概念,并且在最新的WINDOWS95/98以
及WIN NT4中越来越广泛的使用它:我们有理由相信在不久的将来,C O M
将成为构建应用程序最普遍的方法,如果你对此技术有兴趣,不妨参考本
文,希望从中你能学到想知道的知识。如果你已经是C O M老手,也欢迎
你批评指正
本文是针对C++程序员写的。在介绍概念的时候,我尽量不把WIN32 API
的知识混合进来,以便你能够更清晰的看到C O M的本质。所有的例子都
用Microsoft Visual C++5(SP3)编译通过。
一般的讲,一个应用程序总是由单个的二进制文件组成。在以前,如果
这个程序需要做一些改进,就要修改源代码,然后编译,声称新的文件,
然后取代原来的文件。现在,我们用一种全新的角度来看问题:把原先一
整个的EXE可执行文件,分割成功能不同,但相对独立的几个部分,把他
们拼装起来,组成程序,组成软件。在未来程序发布以后,如果意识到需
要对他进行修改,只要替换有问题的或是需要升级的组建就可以了。甚至
可以做到再不影响程序正常运行的情况下替换其中的部件。如果你熟悉
WINDOWS编程,可能会想到:DLL似乎就是你所说的东西:可以动态下,动
态连接。事实上,COM正是充分利用了Win32 DLL的灵活性才得以真正在
Windows平台上实现的。
这样做有哪些优点呢?首先:用户一般希望能够定制所用的应用程序,
而组件技术从本质上讲就是可被定制的,因而用户可以用更能满足他们需
要的某个组件来替换原来的那个。其次,由于组件是相对应用程序独立的
部件,我们可以在不同的程序中使用同一个组件而不会产生任何问题,软
件的可重用性将大大的得到增强。第三,随着网络带宽及其重要性的提高,
分布式网络应用程序毫无疑问的成为软件市场上越来越重要的买点。组件
价构可以使得开发这类应用程序的过程得以简化。
那么,COM到底是什么呢?它是一个说明如何建立可动态互变组件的规范。
他定义了一些为保证能互操作,客户(一个术语,指需要某种组件的程序)
组件必须遵循的标准,COM规范就是一套为组件架构设置标准的文档形
式的规范。COM的发布形式是:以win32动态链接库(DLL)或者可执行文件
(EXE)的形式发布的可执行代码组成。
COM组件是动态连接的,而且COM组件是完全与语言无关的。同时,COM组
件可以以二进制的形式发布。COM组件还可以在不妨碍老客户的情况下被升
级成新的版本。
你现在可以认为,COM所能提供的服务有些类似C++中的类。不过类是基
于源代码的,COM则不是。不过这里要澄清一些关于COM的错误观点:首先,
COM不是一种计算机语言。把COM同某种计算机语言(如C++, VB)相比较是
没有意义的。其次,也不要把DLL和COM做比较,因为COM技术正是利用了
DLL的动态链接能力才得以实现的,而现在一般观点则认为,利用DLL动态
链接能力最佳的方法是COM。
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn