欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用JNA調用DLL文件

 更新時間:2024年12月18日 15:24:52   作者:汪小成  
JNA(Java?Native?Access)是一個在?Java?中調用本地代碼的開源框架,提供了一種簡單、高效的方式來訪問本地動態(tài)鏈接庫,下面我們來看看Java如何使用JNA調用DLL文件吧

1、什么是JNA?

JNA(Java Native Access)是一個在 Java 中調用本地代碼的開源框架,提供了一種簡單、高效的方式來訪問本地動態(tài)鏈接庫(如 .dll、.so 文件)。

2、JNA的使用步驟

1、引入依賴

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

<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。本地接口的詳細代碼如下:

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.打開串口,具體端口數值參考官方對接文檔
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、運行程序

運行程序這一步本身是沒有必要講述的,只是作者汪小成開發(fā)用的電腦是WIN10 64位系統(tǒng),不能調用32位的DLL文件,所以程序不能直接使用IDEA中運行。作者汪小成這里采用的方式是在將程序打成JAR,接著在開發(fā)電腦上安裝一個32位的JDK,最后使用32位的JDK運行打包后的JAR文件。

到此這篇關于Java使用JNA調用DLL文件的文章就介紹到這了,更多相關Java JNA調用DLL文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論