插件系统如何工作?

时间:2010-09-27 17:40:14

标签: c++ c plugins

我正在开发一个项目,我会发现一个基本的插件系统很有用。本质上,我创建了基类,并可以为插件开发人员提供此基类。然后开发人员覆盖它并覆盖方法。然后这就是我对它有点不清楚的地方。它是如何工作的?我在哪里可以找到有关这类系统开发的文档?

由于

4 个答案:

答案 0 :(得分:7)

我所知道的插件系统都使用动态库。基本上,您需要在系统内核和插件之间定义一个小而有效的握手。由于没有C ++ ABI,插件必须只使用C API或使用与系统内核完全相同的编译器(可能还有编译器版本)。

最简单的可想象的协议将是一个函数,所有插件开发人员必须提供,它返回从基类派生的类的实例,作为基类指针返回。 (extern "C"确保函数不会有错误的名称,因此更容易通过名称找到。)类似于:

extern "C" {
  plugin_base* get_plugin();
}

然后,内核会尝试将在指定位置找到的二进制文件作为动态库加载,并尝试查找get_plugin()函数。如果成功,则调用此函数并以加载的插件实例结束。

当然,最好还有一些函数来检查插件编译的API的版本与内核的版本。 (毕竟,您可能会更改该基类。)并且您可能还有其他函数,它们返回有关插件的信息(或者您将其作为基类中的虚拟对象)。这在很大程度上取决于系统的性质。

答案 1 :(得分:2)

答案 2 :(得分:1)

您可以将插件编译为动态/共享库,将其放入插件文件夹,然后从您的代码中动态加载插件文件夹中的所有dll文件。
您可以查看GIMP等程序的源代码,以检查它们如何实现插件。

答案 3 :(得分:1)