协件和插件
昨天偶然想到,IceSword使用的协件机制是一种处理主程序与其它相关性不大的功能之间关系的不错的方法。虽然想到了这点,但并没有马上去看它是怎么实现的,于是自己躺在床上一边嗑瓜子一边想,想了一会儿大概有了个轮廓。今天起来看了下IceSword,发现基本上我想的也差不多就这样了。它有一个C的头文件,提供接口声明,一个DLL提供进程间通信。而我当时想到的是需要一个LIB,可以静态链接进协件。如果有很多接口需要暴露的话,用DLL会好一点,这样相比LIB,能减小每个协件的文件大小。另外唯一剩下需要考虑的是,采用怎样一个良好的进程间通信机制,要快速稳定,同时又不能太消耗系统资源。
插件以前我只用过DLL形式的,其实似乎COM是很不错的一种选择,只不过我一直对COM没研究,看过一些文章,也还是没搞明白怎么用COM实现插件机制。了解过Eclipse和Emacs等弹性非常好的架构后,隐约觉得用脚本来实现插件也是一种极好的方法。重新修葺一遍代码,整理好功能接口,就可以为多种脚本提供支持了。不过还有一点需要注意的是,用脚本实现的插件,对界面的操作大概都需要主程序来支持了,比如显示一条消息,选择一个文件等。另外还有一点需要提到的是,如果主程序需要暴露很多接口给脚本插件,或者同时需要能支持多种脚本语言的话,使用SWIG是个不错的选择。