Plug-in is Everywhere
——Plug-in是一种理念
——Plug-in是一种理念
在一个典型的应用开发过程中,我们必须在设计开发阶段满足所有既定的需求。然而软件开发并非一劳永逸之事,客户对功能的需求永无休止,他们会提出各种各样稀奇古怪的需求,这就迫使软件设计者在体系架构上下功夫。目前,Plug-in(插件)体系架构被认为是避免重复劳动、缩短发布周期、提高可扩展性、吸引用户的良方。使用Plug-in技术允许第三方开发者扩充其功能的例子比比皆是,就连鼎鼎大名的Microsoft也在Office、Visual Studio等产品中加入了add-in功能。成功的开源项目无一例外地采用了Plug-in架构,如Eclipse、Firefox。
什么是Plug-in架构呢?简单地讲,它是一个框架(Framework),允许一个程序在启动时搜索扩展的功能,然后允许Plug-in与自己协作。
怎样才能让Plug-in为我所用?一个非常简单的方法就是利用DLLs。当程序启动时,搜索指定路径下的任何DLLs,然后查询这些DLLs是否满足给定的接口,如果满足就说明DLL是这个程序的插件。
关键:明确定义接口!
请记住:PCI-Express决不可能直接插AGP显卡!
下面是一个简单的Plug-in应用的初始化流程:
1、程序启动;
2、Init函数在指定的目录下搜索所有的DLLs;
3、程序试着在每一个找到的DLL中获取Load函数,如果失败,说明这个DLL不是符合规范的插件;
4、如果Load函数调用成功,程序会缓存每个有效DLL对应的模块句柄,为后面使用插件功能做准备;
5、在程序运行期间,用户选择一个菜单项,于是对应的功能被调用;
6、在程序结束时,Unload函数被调用以便释放Load函数载入的资源。
下图为整个Framework的时序图:
[下载示例代码]