美文网首页程序员
使用JNA完成调取C接口

使用JNA完成调取C接口

作者: OnyWang | 来源:发表于2017-12-28 09:51 被阅读17次

使用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包下载下来,添加到自己的项目里面。

声明方法

  1. 将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文件夹。

相关文章

网友评论

    本文标题:使用JNA完成调取C接口

    本文链接:https://www.haomeiwen.com/subject/ovdmgxtx.html