最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用JNA調(diào)用DLL文件

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

1、什么是JNA?

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

2、JNA的使用步驟

1、引入依賴

pom.xml文件中添加如下內(nèi)容:

<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>5.15.0</version>
</dependency>

2、定義接口

精倫讀卡器官網(wǎng)提供了一個32位的Sdtapi.dll文件。先在接口文件中加載此DLL文件,然后在接口文件中定義需要調(diào)用的方法。

接口需要繼承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();
}

方法名、參數(shù)及返回結果同精倫官方提供的對接文檔中的完全一致。

3、調(diào)用接口方法

精倫讀取器讀取身份證信息的流程:

1.打開串口 2.卡認證 3.讀取身份證信息 4.關閉串口

接下來要做的就是按照上面的步驟調(diào)用接口方法。調(diào)用接口方法的部分代碼如下:

// 1.打開串口,具體端口數(shù)值參考官方對接文檔
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),不能調(diào)用32位的DLL文件,所以程序不能直接使用IDEA中運行。作者汪小成這里采用的方式是在將程序打成JAR,接著在開發(fā)電腦上安裝一個32位的JDK,最后使用32位的JDK運行打包后的JAR文件。

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

相關文章

  • spring cloud-zuul的Filter使用詳解

    spring cloud-zuul的Filter使用詳解

    這篇文章主要介紹了spring cloud-zuul的Filter使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • SpringBoot?替換?if?的參數(shù)校驗示例代碼

    SpringBoot?替換?if?的參數(shù)校驗示例代碼

    Spring?Validation是對hibernate?validation的二次封裝,用于支持spring?mvc參數(shù)自動校驗,接下來,我們以spring-boot項目為例,介紹Spring?Validation的使用,需要的朋友可以參考下
    2022-12-12
  • 如何基于SpringWeb?MultipartFile實現(xiàn)文件上傳、下載功能

    如何基于SpringWeb?MultipartFile實現(xiàn)文件上傳、下載功能

    在做項目時,后端經(jīng)常采用上傳文件組件MultipartFile,下面這篇文章主要給大家介紹了關于如何基于SpringWeb?MultipartFile實現(xiàn)文件上傳、下載功能的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • 詳解spring boot實現(xiàn)websocket

    詳解spring boot實現(xiàn)websocket

    這篇文章主要介紹了詳解spring boot實現(xiàn)websocket,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • java統(tǒng)計字符串中指定元素出現(xiàn)次數(shù)方法

    java統(tǒng)計字符串中指定元素出現(xiàn)次數(shù)方法

    這篇文章主要介紹了java統(tǒng)計字符串中指定元素出現(xiàn)次數(shù)方法,需要的朋友可以參考下
    2015-12-12
  • Java并發(fā)編程之ReentrantLock解析

    Java并發(fā)編程之ReentrantLock解析

    這篇文章主要介紹了Java并發(fā)編程之ReentrantLock解析,ReentrantLock內(nèi)容定義了一個抽象類Sync,繼承自AQS,而不是自己去繼承AQS,所有對ReentrantLock的操作都會轉(zhuǎn)化為對Sync的操作,需要的朋友可以參考下
    2023-12-12
  • Servlet中文亂碼問題解決方案解析

    Servlet中文亂碼問題解決方案解析

    這篇文章主要介紹了Servlet中文亂碼問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot+fileUpload獲取文件上傳進度

    SpringBoot+fileUpload獲取文件上傳進度

    這篇文章主要為大家詳細介紹了SpringBoot+fileUpload獲取文件上傳進度,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 關于SpringBoot中的跨域問題

    關于SpringBoot中的跨域問題

    這篇文章主要介紹了關于SpringBoot中的跨域問題,同源策略是由Netscape提出的一個著名的安全策略,它是瀏覽器最核心也最基本的安全功能,現(xiàn)在所有支持JavaScript的瀏覽器都會使用這個策略,需要的朋友可以參考下
    2023-08-08
  • mybatis-plus id主鍵生成的坑

    mybatis-plus id主鍵生成的坑

    這篇文章主要介紹了mybatis-plus id主鍵生成的坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08

最新評論

疏勒县| 周至县| 醴陵市| 沂水县| 赤峰市| 建始县| 内乡县| 南涧| 亳州市| 兴安盟| 古丈县| 嘉禾县| 泰宁县| 广西| 如东县| 龙江县| 富蕴县| 杭州市| 句容市| 武义县| 鹤岗市| 古浪县| 竹山县| 河北省| 徐州市| 塔河县| 北辰区| 比如县| 南靖县| 平谷区| 建平县| 东乡| 康乐县| 昭苏县| 杭州市| 华阴市| 汕头市| 滨州市| 依兰县| 浑源县| 社会|