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

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”,致敬那个勤奋刻苦的“雷神”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值