1 开篇
说起插件(plug-in)式的应用程序大家应该不陌生吧,记得很早以前有一款很流行的
MP3 播放软件 winmap,它是我记忆里最早认识的一款使用插件模式的应用程序,你可以使用
他的插件管理器插入很多的音乐效果器,皮肤,甚至是歌词显示的面板。接下来看到了
Photoshop 使用插件模式管理虑镜。最后发现只要是大一点的应用程序基本都使用了插件式
的程序框架,就拿我们最常用的工具来说吧,Visual Studio、Office、Delphi、Eclipse 等等。
Eclipse 将插件模式发挥到了及至,因为他是开源的,所以众多的爱好者,开发出了让人应接
不暇的插件。i
为什么使用插件式的应用程序框架呢?我的答案就是他为应用程序的功能扩展提供的
无限的想象空间。一个应用程序,无论你前期做了多少的市场调查,需求分析做的多么完美,
你也只是迎合一部分人的期望,更甚,你只迎合了一部分人的一部分期望,或者一部分人在
某一时间的一部分期望。所以当程序发布以后,你依然有机会提供新的功能而不必重新发布
程序,人们也可以根据自己的需要来开发新的功能来满足自己的需求,据我所知有很多的软
件公司就是专门开发插件来赚钱,真是一举多得,何乐而不为呢?
我们来看一些常见的提供插件模式的应用程序是如何实现插件功能的。据我的使用经验
来看,Visual Studio 和 Office 其实都是自动化程序,通过 COM 的方式提供了一组接口。开发
人员可以利用这些接口来开发基于 COM 的插件,当插件开发完成后,注册 COM 组件。在
Visual Studio 中你可以使用 Add-in 管理器来选择是否启用插件,而 Office 似乎省去了这一
步,一旦你注册了 Office 插件,Office 应用程序在启动的时候会自动加载插件。COM 方式似
乎最受微软的宠爱,因为 COM 是一种二进制重用标准,用户可以使用大部分流行的语言来
开发插件。当然你也可以使用别的方式,比如普通 DLL,只是这样对于开发人员来说适用面
就窄了,因为各个厂商 DLL 的内部结构是不尽相同的,比 VC 开发出的 DLL 和 Borland C++
builder 开发出的 DLL 结构就不同,需要专门的工具进行转换。现在,还有另外一种方式,
使用 dotNet 的 Assembly,使用 dotNet 的好处是开发简单,使用也同样简单(不需要注册),
而且你也可用通过 COM 互操作让开发人员可以使用各种语言进行插件开发,当然用 dotNet
开发还是最简单的,省去不少中间过程。
其实上面介绍的三种方式开发的插件最终还是寄宿在 DLL 中,从中我们就可以看出一些
端倪。为什么使用 DLL 呢?DLL 虽然也是 PE 格式,但是他是不能独立运行的,一般情况下,