使用JNI的各位可能受够了中间层的限制严格的JNI文件(就连方法名也要限制),当然,可以使用javac和javah进行自动生成,但是依然比较繁琐。JNA框架便是基于之上,可以让开发者直接去调用C接口方法的一个框架。
调用步骤
添加jna支持
基于maven的项目,可以在pom文件里面将jar包直接引入。
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.5.0</version>
</dependency>
非maven项目,则可以将jar包下载下来,添加到自己的项目里面。
声明方法
- 将dll文件加载进JVM(使用Native属性加载)。加载方式如下:
CLibrary INSTANCE = (CLibrary) Native.loadLibrary("PR2", CLibrary.class);
2.方法声明,依照dll提供的接口,声明方法即可。
public boolean CITIC_PR2_CloseComPort();
public boolean CITIC_PR2_OpenComPort(int port, long BaudRate, char Parity, char ByteSize, char StopBits);
注意:接口名和参数数量和类型一定要做到和接口文件一致,这样才可以做到正常调用。
调用方法
使用CLibrary直接调取即可。
public boolean open(){
boolean result = CLibrary.INSTANCE.CITIC_PR2_OpenComPort(3,9600,'N','8','1');
return result;
}
注意事项
关于dll加载
比较头大的问题就是加载路径。在这之前,首先一定要搞清楚自己的dll是32位还是64位,非常关键,因为这涉及到我们采用什么样的jdk去调用的问题。实验之后,得到如下结果:32位的jdk调用32位的dll,64位jdk调用64位dll。否则会报dll无法找到的错误。
关于dll存放位置
个人建议32位dll直接放到32位的jdk目录下面的bin文件夹。64位放到64位的jdk目录的bin文件夹。