java调用C语言的dll方法

Java调用C语言动态库 要使用Java调用c/c++的动态库,实现Java程序使用动态库中的函数。常用的方法有JNI、JNA。 阅读详情

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方法会自动给它赋值,然后转String
    String regCode = new String(regCodeByte).trim();
    Map<String, Object> respMap = new HashMap<>();
    respMap.put("statusCode", statusCode);
    respMap.put("regCode", regCode);
    return respMap;
 }
如何在Java中调用DLL:详细图解 首先,我们准备了DLL文件,并创建了一个Java项目。然后,我们导入了JNI库,并编写了Java代码来调用DLL方法。最后,我们编译并运行了Java程序,成功实现了Java与DLL的交互。在开始之前,确保已经设置好Java开发环境,并创建一个Java项目。在Java开发中,有时候需要与动态链接库(DLL)进行交互,以实现更高级的功能。在本例中,我们将使用Java来调用已经编写好的DLL。通过本文的指导,你可以在Java中轻松地调用DLL,并利用DLL的功能扩展你的Java应用程序。第一步:准备DLL文件。 阅读详情

相关推荐

Java语言调用dll文件的几种常见方式

java调用动态库需要关注的问题: 1. 如何装载DLL文件,以及如何定位所要使用的方法; 2. 数据类型如何对应; 3. 如何给使用的方法传递参数; 4. 如何获取返回的值。 一. 数据类型对应关系 Java Type C Type boolean int byte char char wchar_t sho...

专注基础架构领域 6231

java-调用dll方法

由于需求需要添加一个USB狗,作为服务的license验证。则Java程序需要和dll进行整合。该USB狗已经提供了Java版本的dll,需要自己编写class,载入dll,并声明方法才能够使用。

weixin_43846708的博客 7750

Arduino DHT11 ESP8266 在OneNet云平台上读取 温湿度

#include "ESP8266.h" #include "dht11.h" #include "SoftwareSerial.h" #define SSID "540ND" #define PASSWORD "" #define HOST_NAME "api.heclouds.com" #define DEVICE_ID "" #define HOST_PORT (80) String APIKey = " "; #define INTER

weixin_45852947的博客 2430

Java 调用 DLL 文件入门

本文将介绍如何在 Java 中调用 DLL 文件,包括基本概念、环境搭建、JNI 技术、DLL 文件编写和 Java 调用过程。通过本文,读者可以了解 Java 调用 DLL 文件的基本方法,为在实际项目中应用该技术打下基础。

oandy0的博客 4050

Google OR-Tools的CP-SAT求解器,为什么比传统线性规划更适合你的组合优化问题?

本文深入解析Google OR-Tools中的CP-SAT求解器为何比传统线性规划更适合解决组合优化问题。CP-SAT融合约束规划与可满足性理论,原生支持复杂逻辑约束和离散决策,在物流、生产调度等领域展现出显著优势。通过技术对比和实战案例,展示CP-SAT在处理高组合复杂度问题时的卓越性能。

weixin_28700593的博客 925

电机控制个人学习路线及专业书籍资源分享

个人学习电机控制的学习路线,和相关专业书的电子文档分享

weixin_45182459的博客 9913

Java调用C语言DLL文件方法

有时候我们经常要在JAVA中调用C语言DLL文件,下面我们将用一个例题来向大家介绍JAVA调用C语言DLL文件的实现方法   一、生成C的头文件   1.编辑Main.java   publicclassMain   {   publicnativestaticintgetStrNum(bytestr[],intstrLen);   }   ...

linuxstuding 249

Clion+platformIO开发ESP32时找不到lib文件中引入第三方库的头文件(头文件下有波浪线),实际编译是成功的解决方法

Clion+platformIO开发ESP引入第三方库文件编译器无法找到.h文件但编译成功

zs5218的博客 1852

java c dll文件_java通过jni调用C语言文件方法利用cl命令生成dll文件

命令行完成代码:http://www.cnblogs.com/luosongchao/p/3220324.htmlhttp://blog.youkuaiyun.com/jiangwei0910410003/article/details/17465085VS可视化完成C代码:http://blog.youkuaiyun.com/code_nice/article/details/48085363遇到问题:http://b...

weixin_42458282的博客 253

【乐企文件生成工程】关于乐企文件生成工程的详细介绍

发票文件生成方式有两种思路:1、根据已有的OFD模板,动态替换ofd模板内容;之后将ofd转pdf(局限:单行问题不大)详情可以在此处了解2、根据html模板动态占位:该工程就是这种方式 ,目前效果良好,可看下图。拿去即用的源码!无任何保留,当然也并不是所有票种都支持(时间有限、精力有限、已经连着转了,要冒烟了…)

九七的博客 2031

UE5实现距离测量功能

UE5实现距离测量功能

专注GIS开发 6266

Java通过jni调用C语言函数,IntelliJ IDEA,CLion,动态链接库dll,本地方法,native

Java通过jni调用C语言函数,IntelliJ IDEA,CLion,动态链接库dll,本地方法,native

daiyi666的博客 1250

FineReport FCP模拟题五

新建决策报表,设置 移动端 格式,采用绝对布局。数据来源:FRDemo中的订单表/雇员表。

Davina_yu的博客 724

java调用dll

java调用dll 首选写dll # include <Windows.h> _declspec(dllexport) char* go(char *ch) { MessageBox(NULL, TEXT(ch), TEXT("你好"), MB_OK); return "来自dll的问候"; } 注意改成动态库再生成 java调用 复制生成的dll到jav...

Licht1988的博客 182

深入解析:使用Python进行T矩阵散射计算的完整指南

在物理学和工程学中,散射是一个至关重要的概念。当波(无论是光波、声波还是其他类型的波)遇到一个障碍物时,它会在多个方向上散开。为了理解和预测这种行为,我们需要进行数学建模和计算。其中,T矩阵方法是一种非常有效的工具。在开始计算之前,我们需要定义一些基础函数。"""计算T矩阵的一个元素。参数:- wave_vector: 波矢- scatterer_position: 散射体的位置- scatterer_properties: 散射体的性质(如大小、形状等)返回:- T矩阵的一个元素。

qq_38334677的博客 1054

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java通过jni调用c语言方法

有些人会选择用VC++来生成dull文件,但是由于VC++生成的dll文件是32位的,而现在大多数人使用的JDK是64位的,两者不兼容而导致程序无法运行,只能把JDK卸载换装32位版本的才行。但是vs2015可以生成64位的dll文件,所以我们今天就用它来实现java调用c语言方法 1、新建java工程Sudoku 2、新建类文件UseCproject 3、类中方法如图示 4、保存

MrChenxiaoshuai的博客 891

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JNI java调用动态链接库dll

#include #include JNIEXPORT void JNICALL JAVA_ConDll_open(JNIEnv *env,jobject obj);          生成的头文件中方法命名为java类的完整路径和方法,中间用下划线隔开。          注意:如果项目中调用现成的dll文件,我们必须知道C中方法的声明,并在java程序中创建对应的包结构,如果路径不对应

李双喆 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jni c向java传递数组_记JNI实践(Java调用C数组排序)

想学学用C写写代码,发现Java可以通过JNI调用C,可以结合实现些花里胡哨的。遂下了DevC++,尝试一番,记下实践和注意点。目标:Java中声明排序接口,将数组从Java传送到c,c排序后返回。通过替换dll切换排序方法。主要步骤:新建Java类,声明Native接口;自动生成JNI规范的对应C文件格式并实现;Java中加载C编译的dll,调用C的实现;1 Java类声明native接口pac...

weixin_34413326的博客 153

JAVA中native方法调用C语言实现学习

在java虚拟机规范的内存管理划分中,对于虚拟机内存空间划分中专门划了一块内存叫做“本地方法栈(Native Method Stack)”。本地方法栈是为了java专门用来调用native方法而划分出来的一块内存。 我们平时在阅读jdk源代码时也经常能够看到jdk底层存在很多没有java实现方法体的native method,对于这些方法,用java就看不到它的具体实现过程了。那么这些nat

lisehouniao的博客 4731

JAVA调用动态库方法说明

 Java不能直接调用由c或者c++写得dll(TF_ID.dll),所以只能采用jni得方法,一步一步生成符合规范得dll文件(假设叫FANGJIAN.dll),在FANGJIAN.dll这个文件里来调用TF_ID.dll。注意一点:两个dll文件不能重名,为什么呢? 因为java后来执行时候,必须把两个dll文件均考到java得class文件同一目录下,或者把TF_ID.dll考到syst

百年孤独 873

eclipse调用c语言类库

1:编写java代码:如 public class MatrixCalculate { public static native String test(double x,double y); } 然后生成class文件,再生成 .h文件,再生成dll文件。 2:右键java项目 Properties -> java Build Path -> Lib...

weixin_30278311的博客 319

java调用C语言的2种方法

右击我的电脑=》属性=》高级系统配置=》环境变量=》使用者变量(上面的一栏)=》选择Path点编辑最后复制我们解压的路径(要精确到我们解压的mingw64\bin)粘贴到最后面,要用分号跟前面的值分割开。同样新建一个hello.h文件 ,跟上一个方法不同这里使用了JNI类型映射,这是为了确保我们的C/C++代码中实现的函数签名与Java中的native方法声明完全匹配。与上一个同样的方法打包,也是在项目的根目录新建lib文件夹放入其中。来检验是否安装成功,以及查看编译器的版本信息。编译工具下载地址如下。

weixin_72244090的博客 1054

java程序调用dll_Java调用DLL

1、假设现在我们要用Java代码调用C语言的方法,也就是实现a+b的方法。首先,我们需编写一个Java类,如Test.java1 public classTest {2 static{3 System.loadLibrary("jni");4 }5 public native int add(int a,intb);6 public static voidm...

weixin_30844577的博客 513

java 怎么链接ndk的库_Android NDK开发:java调用dll动态链接库方法

目录实现步骤1. 创建Native方法public class JniDemo {public static void main(String[] args){getKey();}public static native String getKey();}2. 生成头文件这里使用javah 命令,需要注意的是要在编译生成的class文件所在的文件夹执行命令:javah 包名.类名(我这没有创建包所...

weixin_40008644的博客 237

java中调用c(c++)写的dll文件的实现及步骤(转)

java中调用c(c++)写的dll文件的实现及步骤(转)网上摘抄java中调用c(c++)写的dll文件的实现及步骤(转)JNI使用技巧点滴本文为在 32 位 Windows 平台上实现 Java 本地方法提供了实用的 示例、步骤和准则。本文中的示例使用 Sun Microsystems 公司创建的 Java Development Kit (JDK) 版本  1.4.1。用 C 语

chenfengwu的专栏 1855
上一篇: phpstudy修改Apache端口号
下一篇: 保证子线程中事务的一致性
o0麦嘎
博客等级 码龄6年 84粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值