System.LoadLibrary 在运行期间或由用户控制

System.LoadLibrary during runtime or controlled by user

是否可以通过 UI 事件加载本机库以响应用户交互?例如,按钮单击等调用 System.LoadLibrary(file_chosen_dynamically) 或条件加载(在 CLI 的情况下)也许一个很好的例子就像文件选择器 select dll/so 文件

据我了解,这是在 class 实例化时完成的。我可以根据需要调用 System.LoadLibrary 还是需要使用 class 加载程序?

所有平台都一样吗(Android/Desktop)

Is it possible to load a native library in response to user interaction by means of UI event?

从技术上讲,是的。

From what I understand, this is done when the class instantiates.

这是正常的方法。您通常将 loadLibrary 调用放入 static 块中,以便在 class 初始化时执行。

Can I just call System.LoadLibrary as desired or do I need to use class loader?

  1. 是(技术上)

  2. 没有。 class 加载程序不需要/不需要参与。

我说“技术上”,因为在 static 初始化程序块之外的其他地方调用 loadLibrary 存在实际问题。

调用 loadLibrary 的主要效果是 native 方法声明将“绑定”到相应的本机代码实现。如果您在 class 初始化时调用 loadLibrary,那么您几乎可以保证在调用本机方法之前绑定已经发生。但是,如果您在另一个时间调用 loadLibrary(在 class 初始化之后),则存在某些代码在绑定到其实现之前调用本地方法的风险。这将触发 Error ... 游戏几乎结束了。

所以...与其交互式地选择一个 DLL,我认为你最好在 DLL 和 Java classes 之间建立一对一的关系,然后交互式地选择一个 class 使用 Class.forName.

加载

Is this the same with all platforms (Android/Desktop)

我相信是的...