0

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

有没有办法做到这一点?

感谢任何回复。

4

1 回答 1

1

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

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

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

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

为防止名称混乱,您可以使用 extern "C" 声明导出的函数,例如

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

但是,这将不允许在函数声明中使用类。

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

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

于 2012-06-02T15:28:48.943 回答