Spring boot中调用C/C++(dll)

本文介绍了如何在Java项目中添加JNA依赖,以便与C/C++编写的DLL进行通信。涉及了C代码编写、编译为DLL、以及在Java中通过JNI调用C函数的步骤,同时强调了32/64位兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加JNA依赖

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

准备C代码/C++代码

如下是C代码,文件名:xizi.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* xiZishuo(const char* name) {
    const char* format = "%s 是我老公\n";
    size_t outputSize = strlen(format) + strlen(name) - 1;
    char* output = (char*)malloc((outputSize + 1) * sizeof(char)); // 加上额外的空间来存储字符串结束符 '\0'
    snprintf(output, outputSize + 1, format, name); // 加上 1 来包含字符串结束符的复制
    return output;
}

int main() {
    const char* name = "小跟班";
    char* result = xiZishuo(name);
    printf("%s", result);
    free(result); // 释放动态分配的内存
    return 0;
}

在这里插入图片描述

生成dll文件

gcc -c -Wall -Werror -fpic xizi.c -o xizi.o

gcc -shared xizi.o -o xizi.dll

在这里插入图片描述

备注:请注意生成的.o 或者.dll是32位还是64位,例如下面这个是32位的
在这里插入图片描述
如果dll是32位,那么java就也要是32位
如果dll是64位,那么java就也要是64位
如果 32位Gcc编译器,然后使用64位jdk,就会出现如下错误
在这里插入图片描述

java连接dll

import com.sun.jna.Library;
import com.sun.jna.Native;
public interface MyDll extends Library {
	//dll的文件名
	String dllName = "xizi";
	
    MyDll INSTANCE = (MyDll) Native.load(dllName, MyDll.class);

    //c实现的方法名
    String xiZishuo(String name);
}

使用dll

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值