《 COM 原理与应用》学习笔记(一)
在接触编程初就有听说过 COM 的大名!于是上网找了些资料,一看,吓呆了 ( 很深奥◎ _ ◎ !) 。
的确 COM 对于刚接触 C/C++ 的我来说,简直就是抽象画,领悟不了。现在有了一定的 C/C++ 基础,我想是时候去悟一悟了。前不久买了潘爱民老师的 <<COM 原理与应用 >> 一书,恩,是本入门好书。于是边学边写这个系列笔记。由于知识浅陋,文中难免有错误和对该书的误解,望大家指正。
闲话少说, go go 。
( 一 ) 、别急,按惯例,首先说说它的由来。
COM 是由 Microsoft 提出的组件标准,与其相对的有对象管理组织提出的 CORBA 标准。(详细的发展历史略)。为什么要 COM 呢?从软件模型的角度来说,就是把一个大型软件分成一个一个模块,模块可以以组件模式来组建成目标程序。即我们的组件拼装成大程序。其实模块化软件可以用其他方法来实现啊,然而 COM 模型带来的优点尤为突出 ( 或者说比其他模型优越很多很多 ) 。
下面来对 COM 模型做个简单、直观的理解。
上图看起来有点象 DLL ,没错,在 Windows 系统平台,一个 COM 组件可以是一个 DLL (但不是什么 DLL 都符合符合 COM 标准的,象 API 这样的函数库就不算是一个标准的 COM 组件),或者是 EXE 文件(象 EXCEL )。从图可以看出, COM 组件就象是一个现成的另部件,程序 A 可以利用 COM 组件的接口来访问调用 COM 组件,同样,可以多个程序同时访问调用 COM 组件。这种设计带来了一系列的好处,如重用性高、升级简单、模块化强,当然还有其他一些优点。
(二)、 COM 特性
( 1 )、语言无关性。这个应该比较好理解。因为 COM 是编译好了的底层代码(书上说是二进制代码), Basic 、 C++ 、 C# 语言都是基于底层代码之上的,所以 C++ 编写的 COM 组件可以被 Basic 程序调用,同样也可以被 C# 程序调用,甚至可以被脚本(如 JavaScript )调用。这就体现了语言无关性。
( 2 )、进程透明性。这个也不难理解。 COM 组件的工作模式包括进程内服务模式、本地服务模式(进程外服务模式)和远程服务模式。那么在后两种调用模式中,程序访问调用 COM 组件的时候必然回关系到进程通信和同步问题。然而,这一切到不用我们程序去刻意管理,都由 COM 库来帮我们管理。 COM 库是一个核心的管理服务程序,以后再讨论。
( 3 )、可重用性。这个更明显。 COM 组件是一个部件,象一个灯管、一个轮胎一样,可以拿到任何要用到这样功能的场合上使用,即重用。
( 4 )、扩展升级容易。扩展一个 COM 组件,只需保留原有接口基础上添加新的接口,而旧版本程序可以无需改动地调用旧接口,同时新版本程序可以调用新添加的接口来实现更强大的功能。
(三)、 COM 用例
COM 组件已经深深地渗入到 Windows 系统如 DirectX 软件包、 RDO 和 ADO 数据访问对象、 Internet Client SDK 等等。即如下方面:
( 1 )、 COM 与数据库
我们编写数据库程序的时候经常用到 ODBC 、 ADO 等编程接口。这些接口就是用 COM 来实现的,用起来简单、灵活、高效。
( 2 )、 COM 与 Intranet
在 Intranet 应用中,这常常见到 COM 的踪影。如网上一些 ActiveX 插件,就是一个 COM 插入到 IE 浏览器中实现特别功能。
( 3 )、其他应用
Excel 可以被用做 COM 组件被程序调用来处理 Excel 表格等等。