插件/运行时扩展体系结构

时间:2009-08-13 06:49:26

标签: plugins runtime

对于语言,通过用户给定的模块/库/代码进行插件或扩展运行时代码的常用方法是什么?我在想C / C ++,但其他语言如何做也可能适用。

3 个答案:

答案 0 :(得分:0)

OSGi是一个广泛使用的Java组件框架,它是Eclipse框架的基础,它也可以解决可插入的UI问题。

答案 1 :(得分:0)

一种方法是将模块编译成动态对象,主程序以dlopen()打开。然后使用dlsym()查找模块必须定义的特定初始化函数,并调用它。例如,您可能会说foo.so中存储的模块必须定义一个名为module_foo_init()的函数。

然后,模块的init例程通常调用主程序提供的函数来为某些事件或钩子注册处理程序。

答案 2 :(得分:0)

我在大多数语言中使用的一般方法:

  • 您有两个二进制文件,主程序和“插件接口库”。
  • 插件接口库基本上只包含一个接口或抽象基类,或类似插件可以编码和扩展的东西。
  • 主程序使用反射或其他标准化接口来提取从所有插件库实现接口的类的实例。对所有插件重复此步骤
  • 只要需要与插件进行交互,就会对界面进行调用。

设计最后一部分是大多数工作的来源。什么叫或挂钩,或者应该允许什么?如何注册,它们只是功能,可能是空的,还是会有某种“挂钩注册”?如果是后者,那将如何工作(我通常将一个对象传递给可用于注册钩子的构造函数)?