Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性。
Java调用C/C++写好的DLL库时,由于基本数据类型不同、使用字节序列可能有差异,所以在参数传递过程中容易出现问题。
使用Java调用DLL动态链接库的方案通常有四种:JNI, Jawin, Jacob,JNative. 其中JNI(Java Native Interface)是Java语言本身提供的调用本地已编译的函数库的方法,本身具有跨平台性,可以在不同的机器上调用不同的本地库。Jawin和Jacob及JNative都是sourceforge.net的开源项目,都是基于JNI技术的依赖Windows的实现,使得在Windows平台下使用COM和DLL的更加方便。

四种说明比较

CXF2问题解决 关于Java调用dll的方法汇总 最终选择JNative

JNA 全称是Java Native Access, 是Sun 推出的一种调用本地方法技术, 比起它的同门师兄JNI,JNA 大大简化了调用本地方法的过程, 使用也比较方便, JNA 是在JNI 的基础上完善的, 用青出于蓝而胜于蓝来形容一点不为过


不堪回首的JNI

我们知道,使用JNI调用.dll/.so共享类库是非常非常麻烦和痛苦的。

 JNA—JNI终结者(JNA代替JNI)

说白了JNA就是JNI的替代品


Java Native Interface  Java本地接口

Java Native Access  Java本机访问


JNI还是不能废

我们已经见识了JNA的强大。JNI和它相比是多么的简陋啊!

但是,有些需求还是必须求助于JNI。

JNA是建立在JNI技术基础之上的一个框架。

使用JNI技术,不仅可以实现Java访问C函数,也可以实现C语言调用Java代码。

而JNA只能实现Java访问C函数,作为一个Java框架,自然不能实现C语言调用Java代码。此时,你还是需要使用JNI技术。

JNI是JNA的基础。是Java和C互操作的技术基础。

JNA是SUN出品

java调用.dll获取.so一般通过JNI,但是JNI的使用比较复杂,需要用C另写一个共享库进行适配。而JNA是一个自动适配工具,通过它调用.dll只需要一个借口即可。