最近在做一个和dll库相关的项目,dll的简介这儿就不说了,主要作用就是windows系统下的一个库,做过Android的对so不陌生吧。那么dll 就和Android下面的so库一个道理。
好吧,话不多说。调用dll其实就是跨语言编程,通过java代码去调用其他语言的代码(如:c,c++),调用方式有多种,如原生的JNI,JNA框架等。本文只介说JNA框架方式调用dll库,原因嘛:主要是 只有这个我才是真的实践成功了的,总不能自己没成功的方法介绍给被人啊。
好,重点来了,第一步下载两个jar包:
晚上很多介绍JNA的文章,但是jar包都需要积分,哎,现年头程序员这么穷,搞积分不好搞,还好被我发现了免费的jar包下载地址。亲测好用
第二步:
将jar包导入到项目中,看你用idea或者eclipse开发,你把项目建起来,helloworld 整出来,就可以开始了。
第三步:把你需要引用的dll文件放在项目下面(如果你要使用绝对路径也可以),反正就是把dll文件的路径通过代码告诉我们的程序,因为我们要通过loadLibrary 这个方法将我们需要用到的dll文件放到我们项目中来。
第四步:定义我们需要调用的dll文件里面的方法。
总结上面的几步很简单,一切都是那么的顺其自然,首先第一步就是准备jar包,第二步就是准备dll文件,第三就是把dll文件加载到项目中,第四步就是调用dll里面的接口方法,也就是我们的最终目的。
好,接下来给大家看看代码怎么写,
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;
public class Main {
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary)
Native.loadLibrary("LibSupervisor",
CLibrary.class);
IntByReference init();
}
public static void main(String[] args) {
try {
System.out.println("当前的" + CLibrary.INSTANCE.init());
} catch (Exception e) {
e.printStackTrace();
}
}
}
就很简单哈,先把上面的代码copy到你的项目里面,然后把dll文件的名称换成你的,然后把 init 方法换成你的,然后再把 init方法的返回值换成你需要的,然后点击允许,那么你就成功了 当然 你可能会出现很多问题,比如,加载不到这个dll文件,那么你就看你的名称和路径写对了没得。
又比如 可能会遇到 这个dll文件引用的其他的dll文件找不到,那么你就需要把这个dll需要引用到的全部的dll 文件都放到项目里面去,不需要通过loadLibary方法,但是至少要和需要调用的dll在同一个目录下,
又比如:可能会出现没有你需要调用的那个方法,那么就看你到底有没有那个方法了啊 或者 名称写对没有啊
又比如: 出现一些Exception in thread "main" java.lang.Error: Invalid memory access 这种异常,很抱歉 我遇到了这个问题 现在还没解决,就要写dll文件的和你一起排查看看问题在那 了。
好的 就说这么多了 有需要源码的 可以留言发给大家参考 就不上传资源坑大家积分看