不用看别的什么程序,自己静心想想就有了(如果把所有实现可能性都想到,远远比你琢磨一个软件会有更开阔的实现选择):
1.通知主程序认领插件。方式很多:用配置文件/注册表/数据库等来存储插件存放的位置(可以是插件目录信息,也可以是单个的插件的位置信息);无需配置指定而直接按内部约定搜索目录(比如很多软件直接到安装目录下的plugin目录中寻找)。寻找的方式和下面第2点“载入”有关,比如到插件目录中再寻找该插件的配置文件,读取要载入的文件名及形式(有的软件允许多种不同形式的插件,如可执行的EXE,DLL,及脚本类的JS,VBS,PY,LUA等等)(有的文件名就可以决定形式,有的则不然,这些其实无须研究其它软件,在你设计时就应该自己想到)。也可以按照内部约定,规定死只读单文件还是只读固定的载入文件,包括其它很多细节等等不能详述,总之,作为一个程序员,如果没有人能让你必须按他的设计来开发软件,你就要知道,一切都由你说了算,也该你去说了算。
2.主程序载入插件。根据你所允许的插件的种类,以及你所用开发语言的语法,去实现不同的载入机制。比如对可执行的EXE,DLL等,直接调用或者带参数调用即可。对动态脚本,如果你是开发WEB应用,应该知道调用很简单。如果是开发系统桌面应用,需要加载脚本引擎,如JS引擎V8,VBS引擎是WIN系统默认自带的,PYTHON引擎可通过一个驻留的PYTHON加载程序来完成(可被其编译成EXE,由主程序调用,无需用户安装PYTHON)。
3.主程序为插件提供的执行时机。有些插件是用户(用菜单或快捷键)选择时立即执行,有些是载入后伺机执行。这要根据你的主程序的功能和所允许插件的功能范围决定。立即执行的,好办。伺机执行的,也只是需要你的主程序把它们的处理函数登记加入(添加而不是覆盖)到你的程序事件中。无论是桌面开发还是WEB开发,事件系统的使用你也应该不会陌生。
4.插件的更新和更完善的管理机制。提供比较系统的插件管理(插件资源的统一寻找,添加,版本号检测,自动更新,启用/禁用,卸载)。
5.插件的安全机制。这是额外附加考虑的。对于不易侦测安全性的EXE,DLL等,要声明由用户自行承担使用风险,一般只是作为自定义“工具”项目允许用户自行添加,很少在插件中使用这种方式,就是主要原因。对于其它格式的,如果是脚本类插件,一般脚本的功能比较有限,但象VBS这样的脚本如果有操作权限也会造成很大危害,所以要么不采用,要么就得对其进行过滤,好在脚本程序是文本文件,比较容易进行甄别和过滤控制。JS虽然相对功能没那么强,但也容易被恶意利用,也要进行一些甄别控制。
theforever: 我上面所讲包涵范围较广。具体到每种具体的环境和语言,都有对应的具体方法。我说的只是思路。无论你熟悉哪一种,只要真正看过两本你所用的开发语言的书,具体做起来应该都知道怎么实现了,如果不清楚的话,建议你还是看看语法书。