广告位联系
返回顶部
分享到

Java使用JNA调用DLL文件

java 来源:互联网 作者:佚名 发布时间:2024-12-19 22:19:32 人浏览
摘要

1、什么是JNA? JNA(Java Native Access)是一个在 Java 中调用本地代码的开源框架,提供了一种简单、高效的方式来访问本地动态链接库(如.dll、.so文件)。 2、JNA的使用步骤 1、引入依赖 在pom.x

1、什么是JNA?

JNA(Java Native Access)是一个在 Java 中调用本地代码的开源框架,提供了一种简单、高效的方式来访问本地动态链接库(如 .dll、.so 文件)。

2、JNA的使用步骤

1、引入依赖

在pom.xml文件中添加如下内容:

1

2

3

4

5

<dependency>

    <groupId>net.java.dev.jna</groupId>

    <artifactId>jna</artifactId>

    <version>5.15.0</version>

</dependency>

2、定义接口

精伦读卡器官网提供了一个32位的Sdtapi.dll文件。先在接口文件中加载此DLL文件,然后在接口文件中定义需要调用的方法。

接口需要继承com.sun.jna.Library。本地接口的详细代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

import com.sun.jna.Library;

import com.sun.jna.Native;

 

/**

 * 精伦身份证阅读器

 */

public interface JLLibrary extends Library {

 

    JLLibrary INSTANCE = Native.load("D:\\23-demo\\Sdtapi", JLLibrary.class);

 

    /**

     * 打开串口

     * @param port 端口号

     * @return 1 - 正确;其它 - 失败

     */

    int InitComm(int port);

 

    /**

     * 卡认证

     * @return 1 - 正确;其它 - 失败

     */

    int Authenticate();

 

    /**

     * 读取卡信息

     * @param name 姓名

     * @param gender 性别

     * @param nation 民族

     * @param birthday 出生日期,格式:yyyyMMdd

     * @param code 身份证号码

     * @param address 地址

     * @param agency 签证机关信息

     * @param beginDate 有效期(起始日期)

     * @param endDate 有效期(结束日期)

     * @return 1 - 正确;其它 - 失败

     */

    int ReadBaseInfos(byte[] name, byte[] gender, byte[] nation, byte[] birthday, byte[] code, byte[] address,

                      byte[] agency, byte[] beginDate, byte[] endDate);

 

    /**

     * 关闭串口

     * @return 1 - 正确;其它 - 失败

     */

    int CloseComm();

}

方法名、参数及返回结果同精伦官方提供的对接文档中的完全一致。

3、调用接口方法

精伦读取器读取身份证信息的流程:

1.打开串口 2.卡认证 3.读取身份证信息 4.关闭串口

接下来要做的就是按照上面的步骤调用接口方法。调用接口方法的部分代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

// 1.打开串口,具体端口数值参考官方对接文档

int deviceResult = JLLibrary.INSTANCE.InitComm(1001);

if (deviceResult == 1) {

    // 2.卡认证

    JLLibrary.INSTANCE.Authenticate();

 

    byte[] name = new byte[31];

    byte[] gender = new byte[3];

    byte[] nation = new byte[10];

    byte[] birthday = new byte[9];

    byte[] code = new byte[19];

    byte[] address = new byte[71];

    byte[] agency = new byte[31];

    byte[] beginDate = new byte[9];

    byte[] endDate = new byte[9];

    // 3.读取基本信息

    int readResult = JLLibrary.INSTANCE.ReadBaseInfos(name, gender, nation, birthday, code, address, agency, beginDate, endDate);

    // 解析

    System.out.println(new String(name, "GBK"));

    System.out.println(new String(gender, "GBK"));

    System.out.println(new String(nation, "GBK"));

    System.out.println(new String(birthday, "GBK"));

    System.out.println(new String(code, "GBK"));

    System.out.println(new String(address, "GBK"));

    System.out.println(new String(agency, "GBK"));

    System.out.println(new String(beginDate, "GBK"));

    System.out.println(new String(endDate, "GBK"));

    // 4.关闭串口

    deviceResult = JLLibrary.INSTANCE.CloseComm();

    if (deviceResult == 1) {

        System.out.println("身份证阅读器关闭成功。");

    } else {

        System.out.println("身份证阅读器关闭失败!");

    }

} else {

    System.out.println("身份证阅读器打开失败!");

}

4、运行程序

运行程序这一步本身是没有必要讲述的,只是作者汪小成开发用的电脑是WIN10 64位系统,不能调用32位的DLL文件,所以程序不能直接使用IDEA中运行。作者汪小成这里采用的方式是在将程序打成JAR,接着在开发电脑上安装一个32位的JDK,最后使用32位的JDK运行打包后的JAR文件。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。

您可能感兴趣的文章 :

原文链接 :
    Tag :
相关文章
  • SpringBoot事务传播机制介绍
    在 Spring Boot 开发中,事务是一个至关重要的概念,尤其是在涉及多层业务逻辑或者多个数据库操作时。Spring 提供了强大的事务管理功能,使
  • Java使用JNA调用DLL文件
    1、什么是JNA? JNA(Java Native Access)是一个在 Java 中调用本地代码的开源框架,提供了一种简单、高效的方式来访问本地动态链接库(如.d
  • Java8 CompletableFuture异步编程解读介绍

    Java8 CompletableFuture异步编程解读介绍
    CompletableFuturede介绍 Java 8 引入了 CompletableFuture 类,这是 Java 异步编程的一个重要进展。 CompletableFuture 提供了一种基于未来结果的异步编程模
  • 基于Maven pom文件使用分析
    project Maven 是一个强大的构建和依赖管理工具,pom.xml 文件是 Maven 项目的核心配置文件,用于定义项目的构建、依赖关系、插件、目标等。它
  • Java-URLDecoder、URLEncoder使用及说明介绍

    Java-URLDecoder、URLEncoder使用及说明介绍
    前言 Java中的URLDecoder和URLEncoder是用于对URL进行编码和解码的类。 URL编码是将URL中的特殊字符转换成特定的格式,以便于在URL中传递参数。
  • SpringBoot内置Tomcat启动方式

    SpringBoot内置Tomcat启动方式
    一、Tomcat相关配置类如何加载的? 在springboot项目中,我们只需要引入spring-boot-starter-web依赖,启动服务成功,我们一个web服务就搭建好了,
  • Springboot接收Get参数实践过程

    Springboot接收Get参数实践过程
    一、参数直接在路径中 1.假设请求地址是如下这种 RESTful 风格 hangge 这个参数值直接放在路径里面: http://localhost:8080/helloworld/张三 1 2 3 4 5
  • MyBatis中的N+1问题的解决方法
    N+1 问题是指在进行一对多查询时,应用程序首先执行一条查询语句获取结果集(即 +1),然后针对每一条结果,再执行 N 条额外的查询语句
  • MyBatis中 #{} 和 ${} 的区别介绍
    在MyBatis中,#{}和${}是两种常见的占位符,它们的作用和使用场景有所不同。理解它们的区别对于正确使用MyBatis非常重要。 在Mybatis面试中常
  • MyBatis实现CRUD的代码

    MyBatis实现CRUD的代码
    准备工作 创建module(Maven的普通Java模块):mybatis-002-crud pom.xml 打包方式jar 依赖: mybatis依赖 mysql驱动依赖 junit依赖 logback依赖 mybatis-config
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计