欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DLL调用(3):Java JNA调用DLL

程序员文章站 2022-06-03 20:44:43
...

Java调用C++的DLL方式很多,其中JNA方式是比较通用的一种。JNA(Java Native Access )提供一组Java工具类,可实现运行期动态访问系统本地库(native library)而不需要编写任何Native/JNI代码。程序需要在java接口中描述目标native library的函数与结构,JNA即可自动实现Java接口到native function的映射。
DLL定义与静态调用中一致,可以参考我的博客:http://blog.csdn.net/ezhchai/article/details/78784572
在GitHub上下载JNA的jar包,https://github.com/java-native-access/jna/releases
下载之后,取出zip中的jna.jar,本例中只用到了这个jar包。
创建一个Java Project,在project中创建一个lib文件夹,将jna.jar加入到其中,project中右击jna.jar文件,Build Path->Add to Build Path加载jna.jar。
将testDLL.dll文件拷贝到project中的src目录,在src中建立一个package。在其中先新建一个接口dllinterface.java。接口中首先还是载入DLL。

dllInterface INSTANCE = (dllInterface) Native.loadLibrary("testDLL",dllInterface.class);

在此之后,声明函数结构。

public int Add(IntByReference a, IntByReference b);

IntByReference对应int的指针。
写完接口后,新建一个Java类DLLTest,用来调用DLL的功能。先生成一个接口实例。

static dllInterface tdll = dllInterface.INSTANCE;

然后即可在主函数中调用DLL功能了。

int c = tdll.Add(aa, bb);

JNA可以让你像调用一般java方法一样直接调用本地方法。就和直接执行本地方法差不多,而且调用本地方法还不用额外的其他处理或者配置什么的,也不需要多余的引用或者编码,使用很方便。但JNA的效率是比较低的,运行速度慢,这一点则引出了后续文章的方法~

完整示例代码可在http://download.csdn.net/download/ezhchai/10155924中下载,起名字为“最简单的JNA调用DLL”,致敬那个勤奋刻苦的“雷神”。

相关标签: java dll JNA