Cpp中的插件 - 执行外部程序功能

时间:2012-06-02 15:06:07

标签: c++ plugins

我想知道是否有任何方法可以在Java中创建类似插件的东西,因此主程序加载子程序并执行它们的功能。我想过一些返回一些值的小程序,但我想让插件能够修改一些主程序对象(可能会以某种方式传递指针?)。

有没有办法做到这一点?

任何回复的Thanx。

1 个答案:

答案 0 :(得分:1)

可以在动态链接库(Windows中的DLL:s)的形式下在运行时动态加载代码。

我使用的方法(至少在处理Windows时)是这样的:

  • 使用一些导出的函数创建一个dll(使用__declspec(dllexport)声明)
  • 使用Windows-API
  • 中的LoadLibrary函数在运行时加载创建的文件
  • 使用函数名称,使用函数GetProcAddress-function以名称获取成员函数的函数指针。

最后一部分可能有点令人困惑,因为C ++使用名称修改来跟踪返回类型和类似的事情。这意味着存储在DLL中的名称不是函数的名称,而是一个名称,其中还包含函数参数类型等的描述。

为防止名称错位,您可以使用extern“C”声明导出的函数,例如

extern "C" __declspec(dllexport) int myFunction(...);

但是,这不允许函数声明中的类。

在动态链接库和“主程序”之间传递指向数据结构的指针时要考虑的一件重要事情是确保两个文件中类型的声明相同(通过共享标头声明很容易实现)类型),否则执行程序时会出现严重错误。

同样,这可能是特定于Windows的,但它可能会为您提供系统上正确过程的提示。