Java 调用本地动态库的组件(javah, JNA, JNR-FFI)

还是很 久很久以前,当初有 Java 调用本地动态库需求的时候,尝试过用 javah/native 原生的方式在 Java 中使用动态库,再就是小试了 JNative,它调用动态库只需 Java 端的动作, 它最后的更新日期是 9 年前 2013-04-26,基本是应该选择放弃了。

关于 JNative 的使用写过两篇

  1. Java调用动态库最简便方法和最好用的组件
  2. 使用JNative,在Java中传递一个C/C++结构参数到动态库中

如今想继续发掘下是否有别的更好的调用本地库的 JNI 组件,找到有

  1. JNIWrapper:居然是一个收费的,而且价格不菲,不作绍
  2. BridJ:也是 7 年前才有过代码的更新
  3. JNA(Java Native Access): 也就它稍为活跃一点点
  4. JNR-FFI:最近几个月也有更新,不知道使用体验如何

阅读全文 >>

Java调用动态库最简便方法和最好用的组件

记得以前 Java 要调用C/C++写得动态库都是用的 JNI 方式,还需要自己写不少 C/C++ 代码。比如说要在Java中调用已有的动态库,如 Windows 的 user32.dll 的方法 MessageBoxA,具体步骤是 Java 中声明一个 native 方法,然后用 javah 命令生成JNI样式的头文件,再自己实现头文件中声明的方法,在实现方法中装载动态库 user32.dll,调用 MessageBoxA 方法,需要把自己写的这部分 C/C++ 代码封装成一个动态库,如Sample.dll,最后在 java  中装载 Sample.dll,然后执行其中所声明的本地方法。

可见,用老实的JNI方式,我们在调用一个已知动态库的时候还需要额外生成一个符合JNI规则的动态库作为桥梁,显得有点多余了。 阅读全文 >>