2009-08-13 47 views
0

对于语言通过用户给定的模块/库/代码......来执行插件或扩展运行时代码的常见方法是什么?我在想C/C++,但其他语言如何做到这一点也可能适用。插件/运行时扩展体系结构

回答

0

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

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

0

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

0

我在工作中的大多数语言这样做的一般方法:

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

设计最后的部分是大部分工作来的地方。什么是调用或钩子,或什么应该被允许?如何注册,它们只是函数,可能是空的,还是会有某种“挂钩注册”?如果后者,这将如何工作(我通常将一个对象传入构造函数中,可以用来注册钩子)?