Delphi/BCB 开发插件架构程序
开发插件架构的应用程序是很多人想做的,插件架构的好处是不言而誉的,可以通过增加不同的插件,从而可以增加应用程序的性能,同时也便于将一个大的任务进行分解,由不同的人开发不同的部分(做成插件形式),然后再组合成一个完整的应用程序。最典型的应用如PhotoShop软件,众所周知,PhotoShop软件通过加载不同的插件极大的扩展了PhotoShop的功能。目前从技术上来讲,开发插件架构一般都是使用COM技术或是类似于COM技术开发,而C#语言通过反射功能实现插件架构也是非常方便的,下面我主要讨论在BCB中,如何不通过真正的COM,使用Delphi/BCB提供的包(Package)技术来开发插件架构。
一, Package和DLL的区别
在网上看到很多朋友询问PACKAGE和DLL的区别,下面我想谈谈我的理解,PACKAGE方式编写的程序,程序中的类在整个进程空间中是一致的,而DLL方式编写的类,在整个进程空间中是不同的,举例来说,假设在主程序(EXE)中和DLL中同时使用VCL类TFont,在DLL中假设存在一个函数:
void __stdcall AssignFont( TFont* pFont)
{
DllFont->Assign( pFont ) ;
}
如果我们在主程序中调用这个函数,就会出错,这是因为主程序中的TFont和DLL中的TFont实际上是两个不同的类,虽然这两个类的名称、定义是完全一样的。而如果是用Package方式开发,则完全没有任何何问题,而DELPHI/BCB均使用Package方式来开发自身,从而可以实现将不同的VCL类库封装在不同的BPL包中。DLL文件的后缀名是.DLL,而Package文件的后缀名是.BPL,Package文件可以理解为BORLAND公司推出的专用DLL格式,但是拥有比DLL更强大的扩展能力。
二, 插件架构要实现的功能
完整的插件架构需要完成以下的功能:1,界面UI的增强或改变(Package包的应用);2,软件功能的扩展能力;3,发现新功能的能力(通过类似于COM的接口实现)
未完待续….