JNA简介

article/2025/10/8 4:30:35

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

JNA

JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个Java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。

  • 优点:JNA可以让你像调用一般java方法一样直接调用本地方法。就和直接执行本地方法差不多,而且调用本地方法还不用额外的其他处理或者配置什么的,也不需要多余的引用或者编码,使用很方便。
  • 缺点:JNA是建立在JNI的基础之上的,所以效率会比JNI低。

关键代码

import com.sun.jna.Library;
import com.sun.jna.Memory;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
public class LYTest {public interface CLibrary extends Library {CLibrary INSTANCE = (CLibrary)Native.loadLibrary("ly_icparse",CLibrary.class);int Parse(String databuf,IntByReference ickh,IntByReference quantity,IntByReference fc,Pointer cid);int Build(int ickh, int quantity, int fc, String cid, Pointer databuf);}public static void main(String[] args) throws Exception {//用于接收输出的char*Pointer databuf = new Memory(512);  CLibrary.INSTANCE.Build(20133058, 11, 3, "201013000285", databuf);byte[] byteArray = databuf.getByteArray(0, 512);String data = new String(byteArray,"UTF-8");System.out.println("data:"+data);//构建读卡数据String databufstr = "A2131091FFFF8115FFFF201013000285FFFFFFFFFFD27600000400FFFFFFFFFF"+data.substring(64,512);IntByReference ickh = new IntByReference();IntByReference quantity = new IntByReference();IntByReference fc = new IntByReference();Pointer cid = new Memory(12);int result = CLibrary.INSTANCE.Parse(databufstr, ickh, quantity, fc, cid);String cidstr =  new String(cid.getByteArray(0, 12),"UTF-8");System.out.println("ickh:"+ickh.getValue());System.out.println("quantity:"+quantity.getValue());System.out.println("fc:"+fc.getValue());System.out.println("cid:"+cidstr);System.out.println("result:"+result);}
}

说明

常用的c于java参数对应关系

c参数java参数说明
int*IntByReference出参,入参直接用int
char*Pointer/Memory出参,入参直接用String

char*作为出参时需要知道对应的字符串长度在获得内容时使用。



来自为知笔记(Wiz)


附件列表

 

转载于:https://my.oschina.net/MeiJianMing/blog/1812014


http://chatgpt.dhexx.cn/article/emt7yywd.shtml

相关文章

JNA的概念

1. JNA简单介绍 先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言(尤其C/C)写的代码进行交互,只要遵守调用约定即可。首先看下JNI调用C/C的过程,注意写程序…

Java 之 JNA(调用第三方库)

是什么? 一、了解JNA之前,我们先了解一下JNA的前身JNI(Java Native Interface):通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。 [1] 从Java1.1开始,JNI标准成为java平台…

JNA实战笔记汇总(一)—— JNA简介及demo环境创建

目录 1、简介 2、原理 3、配置环境,创建demo 3.1 搞清楚.dll/.so文件适用环境 3.2 创建一个普通的maven项目 3.2.1 将.dll/.so文件放在resources根路径下 3.2.2 pom.xml文件添加jna依赖 3.2.3 编写一个CLibrary接口,继承Library接口 3.2.4 编写…

ROW(行)与COLUMN(列)

数列数,COLUMNS(A:B)2,即A到B一共两列。

column函数HTML5,column函数 excel中column函数的使用方法

column函数是一种查询的工具,我相信许多人都不会使用到这一个函数,因此在实际工程当中并不是十分的常见,然而这一款韩束如果能够掌握,对我们的工作也是非常有帮助的,接下来我们就一起来好好的了解一下这个函数究竟该如何使用。 column函数——column函数的使用方法 1.colu…

Duplicate column name ‘xxx_column‘

错误场景: 使用MyBatisPlus分页查询的情况下列名重复(注:select查询不报错, 映射正常) 例如 → select id, name, name from user 解决方法: 列名重复,删除重复的列名, 保证留一个就可以了 错误原因: 根据错误定位到PaginationInterceptor的queryTotal方法 最终…

mysql插入报错:colum xxx cannot be null

测试同学催促我赶紧解决上面的问题,首先看了下数据库这个字段确实是必填的,默认是当前时间 可是看了下代码发现mybatis的sql语句插入的时候包含了这个operate_time字段 那么讲道理必需给实体对象的operateTime字段赋值才行,可线上代码明明没有…

Vue template中函数获取el-table-colum中的属性值

方案如下&#xff1a; <el-table-column prop"id" label"操作"><template slot-scope"scope"><istyle"margin: 0 10px; cursor: pointer"click"clickItemInfo(scope.$index, scope.row,scope.column,scope.row.i…

hbase架构原理之region、memstore、hfile、hlog、columm-family、colum、cell

**鄙人的新书《elasticsearch7完全开发指南》&#xff0c;欢迎订阅&#xff01;** ----- https://wenku.baidu.com/view/8ff2ce94591b6bd97f192279168884868762b8e7 **《kibana权威指南》** ---- https://wenku.baidu.com/view/24cfee1ce43a580216fc700abb68a98270feac21 Hbas…

Row Column

Row Column 参考&#xff1a; Row classFlutter Layout Cheat SheetFlutter — Row/Column Cheat Sheet mainAxisAlignment和crossAxisAlignment 属性mainAxisAlignment和crossAxisAlignment mainAxisAlignment - 表示的是主轴的对齐方式crossAxisAlignment - 表示的是次轴…

Mybatis中resultMap的Colum和property属性

1&#xff1a; resultMap标签 当我们的数据库字段与实体类的属性不一致时&#xff0c;就需要使用该标签进行一一映射。 2&#xff1a;使用情况 2.1 简单查询 <resultMap id"这个resultMap的id" type"对应实体类的全限定类名"><id column"…

CSS3多列布局columns相关属性

tip&#xff1a;有问题或者需要大厂内推的我脉脉哦&#xff1a;丛培森 ٩( ‘ω’ )و CSS3中增加了可以实现多列布局的属性 在此之前的实现很麻烦可能需要各种定位 现在我们只需要一个属性就可以实现 多列布局类似于我们的报纸布局 这样可以方便读者观看 #多列数量与多列宽度#…

mysql5.7以上报错:Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated colum

这里写目录标题 一、前言二、解决方法临时解决&#xff1a;永久解决&#xff1a; 一、前言 在写sql时报错信息&#xff1a; 1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘pms.ru.role_id’ which is not functionall…

Vue+EleMentUI实现el-table-colum表格select下拉框可编辑

说明&#xff1a; 在进行采购入库的过程中&#xff0c;有必要对表格中的一行进行快速编辑保存&#xff0c;节省时间&#xff0c;提高工作效率&#xff01;&#xff0c;而不是每次编辑都要弹窗才可编辑 源码&#xff1a;https://gitee.com/charlinchenlin/store-pos 效果图&am…

Flutter学习(三)Row,Colum布局

主题 本文将介绍&#xff0c;flutter中的row&#xff0c;colum的用法。通俗来说&#xff0c;就是横向布局和纵向布局的用法。 开发环境 win10 androidstudio2022.1.1 jdk11 fluttersdk-flutter_windows_3.7.8 源码 文末将会附上完整开源demo地址 开发过程 首先&#xff…

column多列布局

CSS3 新增多列布局适合排版很长的文字内容&#xff0c;让其多列显示。使开发者能够轻松实现报纸版式的布局。 colum的相关属性&#xff1a; 属性说明column-count属性值是一个数字&#xff0c;规定元素被分为几列column-width列宽column-gap列与列的间隔宽度column-rule列的间…

为什么函数f(x)=x²不是满射

看到许多同学在问这个问题&#xff0c;一时也不知道该问谁&#xff0c;今天就去刨根问底了一下。 大致弄清缘由了&#xff0c;很可能是有同学看到有一本书《高等数学第7版上册》&#xff08;同济大学数学系 编&#xff09;&#xff0c;其中的第一章 函数与极限 第2页 例1提到&…

e^x导数证明

证明当x→0时,e^x-1与x是等价无穷小 https://www.zybang.com/question/1888f36ace3f205309482870c58e8a64.html

关于优化公式的小白理解

1、为什么要将e(x)写成e(xdx)的形式&#xff1f; 2、J(x)是什么对什么的导数&#xff1f; 理解 1、形式上来说&#xff0c;e(x)和e(xdx)并没有任何区别&#xff0c;以为dx本身就是小量&#xff0c;只要xdx还在作用域&#xff1f;内&#xff0c;函数的意思就是一样的。 更土一点…

x 的平方根(牛顿迭代法)

x 的平方根 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根&#xff0c;其中 x 是非负整数。 由于返回类型是整数&#xff0c;结果只保留整数的部分&#xff0c;小数部分将被舍去。也就是说向下取整. 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根…