,减少大量的软件重新编译与发布麻烦与时间;
3、 能够很好实现软件模块的分工开发,能够大量吸取他人的优长;
4、 可较好实现代码隐藏,保护知识产权。
三、基于COM的原型实现
平台+插件软件的目标及设计思路已经明确,那么用什么样的方法和技术实现插件(程序插件),从目前已有这方面软件的设计方法来看(Windows系统上的软件),一种是使用传统DLL方法的实现,一种是使用COM方法的实现。下面就以COM技术为基础,实现一个基本的原型框架设计。COM技术的原理大家都已经相当熟悉,本文为了实现平台+插件的几方面功能,相应地采用COM的相关方面技术与方法来介绍有关实现要点。整个原型系统开发环境:Windows 2000、Visual C++ 7.0,使用的开发库包括MFC和ATL。
插件注册 为了管理插件首先是设计一种插件的注册机制,通过此种机制平台可以搜索到系统中所有的可用插件,并在平台上生成各插件的调用点。注册就需要为每插件设置一个特殊标识,有了这个标识的插件,平台就可以使用。使用COM实现注册机制有一种非常好的方法,这就是组件目录(Component Category)。组件目录也是COM实现的标准接口(Interface,不同于平台+插件中所说的接口)。在设计COM组件时,只为其定义一个目录分类信息即可,之后就可使用标准的组件目录接口在系统中搜索特定类型的组件,插件注册与标识就可轻松地解决了。
插件管理与调用 由组件目录获得特定标识的组件后,就需要为每个插件生成管理机制,每个插件都有一个类ID(CLSID),在平台中为每个插件生成一个类ID数组,每个插件的每一个可调用功能均生成一个菜单项(动态生成菜单项)。对每个插件是否激活,平台都有相应的记录信息。插件调用可通过菜单消息循环或内部调用实现。
平台扩展接口和插件接口 这两个接口不同于COM技术中的接口,但平台扩展接口和插件接口可使用COM技术的接口定义实现。在原型系统的实现上平台扩展接口定义了一个IServer接口,插件接口定义了一个IPlugin接口。IServer接口用于为插件传递内部数据接口,IPlugin接口用于读取插件功能信息,并且还用于传递平台消息与资源句柄。
消息、资源与数据传递 平台与插件之间需要进行大量的消息与数据交互,其中包括:各种Windows消息、各种Windows资源句柄,以及系统使用的各种内部数据,有时还可能需要分配内存。所有的消息与数据交互均由平台扩展接口和插件接口所定义的标准方法实现,在原型系统中已经实现了鼠标消息、窗口句柄、设备句柄和程序内部定义数据结构的传递。
结 论:原型系统已实现一种通用的平台+插件软件开发的框架模式,通过实践证明这种思路和设计方法可行,可以应用到我们的具体软件开发上。通过这种方式可以很好地解决软件合作开发与集成问题,对有版本级别的软件开发更为有用。高级版的软件安装有高级版的插件,低级版的软件不安装高级版的插件,这就给程序分发和开发带来极大的便利。对于有系列化功能的软件,系列化功能由插件实现。