jna 从入门到快速开发(一)

前言:

       公司最近在做摄像头相关的业务,摄像头配套的软件,一般都是C++写的,windows的动态链接库.dll文件,以及linux下的.so文件。刚开始接触这个的时候,真的是头疼,找不到一个简单暴力的教程教我怎么用Java对接它们,遇到的问题也只能百度一个一个搜。现在项目开发告一段落(前前后后对接了三个摄像头设备的sdk,百来个方法),对jna有一定程度上的掌握了,整理成笔记。

       ps:这段期间用Jna开发大部分功能都顺利实现了,就碰到过一种情况,貌似只能用jni解决,以后有空再出Jni的教程

 

正文:

        Jna是Java用来对接动态链接库的一个库。先放出一个简单的demo,下载下来直接运行就ok,运行环境 jdk8(64位) ,必须64位。    (如果将来开发中要对接x86的32位动态链接库,就必须用32位的jdk  !!!!!)

        码云地址:https://gitee.com/lllyl2012/jnaDemo/tree/master/src/main/java/top

 

以下是该demo的开发步骤。

步骤一:

       将要对接的hello.dll文件,丢入到项目的根路径下

 

步骤二:

       创建用于对接hello.dll文件的java类 ----- JnaSDK.java,代码如下:

       该dll只有一个方法,就是Add,将两个数字相加。这个方法的返回值、入参、方法名 都与.dll中的一一对应。(一般.dll的提供商会提供文档,或者.h的头文件,这两样东西里都会有关于方法签名的描述)

package top;

import com.sun.jna.Library;

public interface JnaSDK extends Library {
    int Add(int a,int b);
}

 

步骤三:

       开始调用这个方法,编写一个新的类JnaDemo,代码和注释如下:

       代码要兼容windows和Linux,所以实例化JnaSDK的时候务必这么写。

package top;

import com.sun.jna.Native;

public class JnaDemo {

    //根据环境获得hello.dll或者hello.so文件,并以此获得JnaSDK的实例
    private static JnaSDK jnaSDK = (JnaSDK)(System.getProperty("os.name").toLowerCase().startsWith("win")? Native.loadLibrary("hello.dll",JnaSDK.class):Native.loadLibrary("hello.so",JnaSDK.class));

    public static void main(String[] args) {
        //直接调用方法
        System.out.println(jnaSDK.Add(1,4));
    }
}

执行结果:5

 

 

可能会碰到的问题:

1、这个demo项目中只给出了.dll文件,.so文件没给出,所以请在windows下运行

2、jdk一定要用64位的,因为这个dll文件是64位的

3、pom.xml中给出的jna版本是5.5.0,是目前(2020-3-28)最新的版本,根据我目前开发过来的三个sdk情况来看,不同jna版本之间的使用效果并不一样!!!在实际的公司的项目开发中,出现问题可以多切换几个Jna版本来测试,选能用的版本。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
注:下文中的 *** 代表文件名中的版本号。 # 【jna-***.jar中文文档.zip】 中包含: 中文文档:【jna-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【jna-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【jna-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【jna-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【jna-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: jna-***.jar中文文档.zip,java,jna-***.jar,net.java.dev.jna,jna,***,com.sun.jna,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【jna-***.jar中文文档.zip】,再解压其中的 【jna-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'net.java.dev.jna', name: 'jna', version: '***' Gradle (Short): implementation 'net.java.dev.jna:jna:***' Gradle (Kotlin): implementation("net.java.dev.jna:jna:***") ``` # 含有的 Java package(包)(此处仅列举3个): ``` com.sun.jna com.sun.jna.internal com.sun.jna.platform ...... ``` # 含有的 Java class(类)(此处仅列举3个): ``` com.sun.jna.AltCallingConvention com.sun.jna.Callback com.sun.jna.Callback.UncaughtExceptionHandler ...... ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值