一些C语言的接口见上一篇文章
同样把用到的动态库放到jdk的bin目录文件夹下
Termb.java

import com.sun.jna.Library;
import com.sun.jna.Native;public interface Termb extends Library {Termb instanceDll  = (Termb) Native.loadLibrary("Termb",Termb.class);int CVR_InitComm(int Port);int CVR_Authenticate();int CVR_Read_Content(int active);int  GetPeopleIDCode(byte[] strTmp, byte[] strLen);}

测试类:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;import java.io.UnsupportedEncodingException;/*** @author: xiepanpan* @Date: 2020/5/14* @Description:*/
public class TestCVR {static Logger logger = LoggerFactory.getLogger(TestCVR.class);static String strTmp = "";public static void main(String[] args) {//1.打开端口try{int portReturnCode = Termb.instanceDll.CVR_InitComm(1001);System.out.println("打开端口返回值:" + String.valueOf(portReturnCode));if (portReturnCode!=1) {}}catch(Exception ex){logger.error("打开端口调用异常!"+ ex.getMessage());}try {System.out.println("请放置身份证。。。");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}// 2. 认证int authReturnCode = 0;try{authReturnCode = Termb.instanceDll.CVR_Authenticate();System.out.println("认证返回值:" + String.valueOf(authReturnCode));if (authReturnCode!=1) {}}catch(Exception ex){logger.error("认证调用异常!"+ ex.getMessage());}//3. 读卡int readReturnCode = 0;try{readReturnCode = Termb.instanceDll.CVR_Read_Content(4);System.out.println("读卡返回值:" + String.valueOf(readReturnCode));if (authReturnCode!=1) {}}catch(Exception ex){logger.error("读卡调用异常!"+ ex.getMessage());}//4. 读取身份证号码int readIdReturnCode = 0;try{byte[] a = new byte[4*10];byte[] b = new byte[4*30];readIdReturnCode = Termb.instanceDll.GetPeopleIDCode(a,b);System.out.println("读取身份证号码返回值:" + String.valueOf(readIdReturnCode));if(readIdReturnCode == 1){System.out.println("身份号码读取成功:" + new String(a));}}catch(Exception ex){logger.error("调用异常!"+ ex.getMessage());}}}

那如果是web工程呢 有的小朋友说了我就不把动态库放到bin目录下边 能行么

答案是可以的 这里贴一下我的web工程的代码
目录结构:

接口Termb


import com.sun.jna.Library;
import com.sun.jna.Native;
import com.thunisoft.jy.ywgk.zf.utils.D5ScannerS77;/***  @author: xiepanpan*  @Date: 2020/5/14*  @Description:  调用身份证读卡器的动态库*/
public interface Termb extends Library {//绝对路径的地址获取,注意要去空格String filePath = Termb.class.getResource("").getPath().replaceFirst("/","").replaceAll("%20"," ")+"termb.dll";//先加载这两个dllUnPack UN_PACK = UnPack.instanceDll;Sdtapi SDTAPI = Sdtapi.instanceDll;Termb instanceDll  = (Termb) Native.loadLibrary(filePath,Termb.class);/***   初始化连接* @param Port* @return*/int CVR_InitComm(int Port);/***  卡认证* @return*/int CVR_Authenticate();/***  读卡操作* @param active* @return*/int  CVR_Read_Content(int active);/*** 得到卡号信息* @param strTmp 返回的信息缓存指针* @param strLen 返回的信息长度指针* @return*/int  GetPeopleIDCode(byte[] strTmp, byte[] strLen);}

接口Sdtapi


import com.sun.jna.Library;
import com.sun.jna.Native;/***  @author: xiepanpan*  @Date: 2020/5/15*  @Description: 安全模块通讯函数*/
public interface Sdtapi extends Library {//绝对路径的地址获取,注意要去空格String filePath = Sdtapi.class.getResource("").getPath().replaceFirst("/","").replaceAll("%20"," ")+"sdtapi.dll";Sdtapi instanceDll  = (Sdtapi) Native.loadLibrary(filePath,Sdtapi.class);
}

接口UnPack


import com.sun.jna.Library;
import com.sun.jna.Native;/***  @author: xiepanpan*  @Date: 2020/5/15*  @Description: 身份证相片解码库*/
public interface UnPack extends Library {//绝对路径的地址获取,注意要去空格String filePath = UnPack.class.getResource("").getPath().replaceFirst("/","").replaceAll("%20"," ")+"UnPack.dll";UnPack instanceDll  = (UnPack) Native.loadLibrary(filePath,UnPack.class);
}

关键代码:

 //绝对路径的地址获取,注意要去空格String filePath = Termb.class.getResource("").getPath().replaceFirst("/","").replaceAll("%20"," ")+"termb.dll";//先加载这两个dllUnPack UN_PACK = UnPack.instanceDll;Sdtapi SDTAPI = Sdtapi.instanceDll;Termb instanceDll  = (Termb) Native.loadLibrary(filePath,Termb.class);

一个接口对应一个dll文件
因为Termb.dll文件依赖UnPack.dll 和sdtapi.dll 因此加载Termb.dll 先加载

java与C语言 参数类型的映射关系:

出处:
https://github.com/java-native-access/jna/edit/master/www/Mappings.md

参考博客:
https://www.cnblogs.com/digdeep/p/5288215.html

使用jna调用c语言动态库对接华视电子身份证阅读机相关推荐

  1. 使用jnative调用c语言动态库对接华视电子身份证阅读机

    一 身份证阅读器SDK使用手册 1. 定义 应用函数开发包含下列文件: termb.dll API函数的动态联接库 sdtapi.dll 安全模块通讯函数 UnPack.dll 身份证相片解码库 适用 ...

  2. vue调用华视电子身份证阅读器cvr-100uc

    1.去官网下载安装包服务下载_华视电子 解压后点击 安装后找到网页版开发包 点击华视电子读卡器安装,安装后点击读卡服务 安装USB插件. 2.新建reader.js文件,阅读器默认端口19196 3. ...

  3. Rust应用调用C语言动态库

    外部功能接口FFI 虽然高级(脚本)编程语言的功能丰富,表达能力强,但对底层的一些特殊操作的支持并不完善,就需要以其他编程语言来实现.调用其他编程语言的接口,被称为Foreign Function I ...

  4. go语言调用c语言动态库及交叉编译

    实现基础:CGO编程 C/C++经过几十年的发展,已经积累了庞大的软件资产,它们很多久经考验而且性能已经足够优化.Go语言必须能够站在C/C++这个巨人的肩膀之上,有了海量的C/C++软件资产兜底之后 ...

  5. java调用c语言_Java调用C语言动态库(JNA方式,持续)

    过程主要分为以下几个步骤: 1.vs2017编写cpp/h代码,编译成dll,编译成功后,用depends查看库的依赖是否有缺失,也可以自己写个demo,调用这个dll中的函数,是否可以调用成功作为验 ...

  6. Java调用C语言动态库

    过程主要分为以下几个步骤: 1.vs2017编写cpp/h代码,编译成dll,编译成功后,用depends查看库的依赖是否有缺失,也可以自己写个demo,调用这个dll中的函数,是否可以调用成功作为验 ...

  7. c语言怎么调用sdl库函数,Go调用SDL2的C语言动态库

    # Go调用SDL2的C语言动态库 在网上找到go的GUI项目基本都需要安装额外软件库,尝试了一下使用go调用dll库的,有所收获,抛砖引玉,留个记录怕以后忘了. ## 1.目录结构 ``` └─li ...

  8. JAVA如何调用C/C++动态库

    一.调用方式: JAVA调用C/C++动态库有很多方法,常用的有JNI(Java Native Interface).JNA(Java Native Access). JNI:早在JAVA1.1版本就 ...

  9. C# VC6调用VC6的动态库DLL

    C# VC6调用VC6的动态库DLL 一 VC创建动态库 1. DLL的创建 启动VC6.0, 新建一个"Win32 Dynamic-Link Library"工程,选择" ...

最新文章

  1. 随机加解密java_JAVA随机数生成 Math.random和java.util.Random使用简介
  2. sql-bench mysql_MySQL性能测试(一)——RHEL 7.1, MySQL 5.6.25, sql-bench
  3. iOS interface适配
  4. web报表工具FineReport使用中遇到的常见报错及解决办法(二)
  5. 几组图片轮回html,HTML 5 Canvas
  6. 广义线性模型(Generalized Linear Models, GLM)
  7. Enviropro EP100D-08管式土壤水分探针
  8. [转]如何在NIOS II中读写EPCS剩余空间
  9. 火箭08-09赛程列表
  10. 郭涛 黄渤 田原09贺岁大片《高兴》DVD修正版
  11. 安卓Android与H5双向交互MathJax展示数学公式(源码+解析)
  12. 基于SSM的汽车维修管理软件设计与实现
  13. vue.js的两个核心是什么
  14. ctfshow-web78(文件包含)
  15. android tabhost 分割线,FragmentTabHost使用方法详解
  16. 宽带拨号任何使用计算机,宽带拨号密码怎么查看【图解】
  17. usb high speed chirp
  18. 《华为研发》 张利华
  19. 解决Pycharm安装库出现Installing Packages Failed错误
  20. ylinux系统找到软件_linux系统如何安装软件 (详细文字教程)

热门文章

  1. Python的扩展阅读
  2. 《人机交互的软件工程视角》知识点总结
  3. ArcBlock 课堂 ⑥ | 多步验证那些事 (全程视频 + 文字)
  4. 在VS2008里编译x264(菜逼专用)
  5. python3.6安装
  6. php循环控制打印表格隔行变色的两种方法
  7. 编程中的燕尾槽刀具该如何加工设置
  8. Oracle 11g修改字符集
  9. “公式相声”来了,人工智能说相声还会远吗?
  10. 影响中国管理的10大商业模式