当前位置: 首页 > ai >正文

java调用C语言的dll方法

0 前言

同事用C语言写了几个方法,封装成dll文件,要用java去调用dll里的方法

1 dll方法说明

在这里插入图片描述

2 将dll文件放到指定目录下

如:C:\soft\project\encrypt\encryptDll\DllEnCry.dll

3 pom文件

引入以下两个依赖:

<dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.13.0</version>
</dependency>
<dependency><groupId>net.java.dev.jna</groupId><artifactId>jna-platform</artifactId><version>5.12.1</version>
</dependency>

4 工具类

public interface EncryptDllUtils extends Library {EncryptDllUtils instance = Native.load("C:\\soft\\project\\encrypt\\encryptDll\\DllEnCry.dll", EncryptDllUtils.class);int GetRegisterCode(String machcode, byte[] regcode, String softIDList, int[] mode, String time);
}

注意点:
① load()方法里好像只能传绝对路径,相对路径会识别不到
② 方法名和dll的方法名保持一致
③ 出参和入参中字段名和dll中的字段名保持一致,字段类型需要对应上,java和C语言的字段类型参考以下:

Java数据类型C/C++数据类型
booleanbool
bytechar
shortshort
intint
longlong long
floatfloat
doubledouble
Stringconst char*
byte[]char*
short[]short*
int[]bool
booleanint*
long[]long*
float[]float*
double[]double*

5 调用

方法中的byte[] regcode是dll返回参数,需要提前把**byte[]**传进去,dll会自动赋值应该是

public static Map<String, Object>  generate(String machCode, String softIDList, int[] modes, String time) {byte[] regCodeByte = new byte[5000];int statusCode = EncryptDllUtils.instance.GetRegisterCode(machCode, regCodeByte, softIDList, modes, time);// regCodeByte在调用万dll中的方法后,dll方法会自动给它赋值,然后转StringString regCode = new String(regCodeByte).trim();Map<String, Object> respMap = new HashMap<>();respMap.put("statusCode", statusCode);respMap.put("regCode", regCode);return respMap;}
http://www.xdnf.cn/news/9417.html

相关文章:

  • JWT安全:假密钥.【签名随便写实现越权绕过.】
  • PHP+MySQL开发语言 在线下单订水送水小程序源码及搭建指南
  • TypeScript 中的剩余参数:灵活处理可变数量参数
  • Prometheus + Grafana 监控常用服务
  • 《Scientific Reports撤稿门技术节分析》——从图像篡改检测到学术伦理重建的技术透视
  • Golang | gRPC索引服务
  • HTTP协议接口三种测试方法之-JMeter(保姆教程)
  • 大模型在先天性肌性斜颈诊疗全流程中的应用研究报告
  • Flink SQL 编程详解:从入门到实战难题与解决方案
  • 论文笔记:Towards Explainable Traffic Flow Prediction with Large Language Models
  • 查询oracle进程数和会话数进行优化
  • Gemini Pro 2.5 输出
  • P2014 [CTSC1997] 选课
  • 53、用例(Use Case)详解
  • 封装索引列表
  • AXI3、AXI4 和 AXI5 的详细差异对比
  • 第三章、运动学逆解(双足轮根据腿高求舵机角度)
  • 完全卸载VS Code--Windows版
  • 在 Vue + Vite 项目中,直接使用相对路径或绝对路径引用本地图片资源时,图片无法正确显示。
  • Claude 4对比Claude 3.7全面评测:2025最新AI模型实测对比
  • 山东大学软件学院创新项目实训开发日志——第十三周
  • xilinx 7系列底层可配置逻辑块CLB中的LUT、FF等资源
  • IT编程学习资料大全​​​​​​​​
  • 嵌入式学习之系统编程(六)线程
  • 打破边界 智启新篇 新一代质检LIMS系统的演进蓝图
  • QGis实现geoserver上的样式展示(方便样式编辑)
  • ShardingSphere-读写分离
  • leetcode0611. 有效三角形的个数-medium
  • ROS2学习(14)------ ROS2Launch 多节点启动与配置脚本
  • 基于stm32的 永磁同步电机二电平驱动控制系统设计