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

添加JNA依赖

xml 复制代码
<dependency>
	<groupId>net.java.dev.jna</groupId>
	<artifactId>jna</artifactId>
	<version>5.5.0</version>
</dependency>

准备C代码/C++代码

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

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文件

bash 复制代码
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

java 复制代码
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

相关推荐
RainbowSea几秒前
补充:问题:CORS ,前后端访问跨域问题
java·spring boot·spring
津津有味道2 分钟前
Qt C++串口SerialPort通讯发送指令读写NFC M1卡
linux·c++·qt·串口通信·serial·m1·nfc
傅里叶的耶30 分钟前
C++系列(二):告别低效循环!选择、循环、跳转原理与优化实战全解析
c++·visual studio
猫猫的小茶馆40 分钟前
【STM32】预分频因子(Prescaler)和重装载值(Reload Value)
c语言·stm32·单片机·嵌入式硬件·mcu·51单片机
JeffersonZU41 分钟前
Linux/Unix文件IO(文件描述符、原子操作、文件数据结构、open、read、write、fcntl、dup)
linux·c语言·unix·gnu
Vitta_U1 小时前
MFC的List Control自适应主界面大小
c++·list·mfc
Dovis(誓平步青云)2 小时前
基于探索C++特殊容器类型:容器适配器+底层实现原理
开发语言·c++·queue·适配器·stack
pipip.3 小时前
UDP————套接字socket
linux·网络·c++·网络协议·udp
paopaokaka_luck3 小时前
基于SpringBoot+Vue的电影售票系统(协同过滤算法)
vue.js·spring boot·后端
智者知已应修善业4 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机