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

相关推荐
Aurorar0rua9 小时前
CS50 x 2024 Notes C - 07
c语言·学习方法
AI进化营-智能译站9 小时前
ROS2 C++开发系列07-高效构建机器人决策逻辑,运算符与控制流实战
开发语言·c++·ai·机器人
爱编码的小八嘎9 小时前
C语言完美演绎9-15
c语言
winner88819 小时前
C++ 命名空间、虚函数、抽象类、protected 权限全套通俗易懂精讲(附与 Java 对比)
java·开发语言·c++
不会编程的懒洋洋9 小时前
C# P/Invoke 基础
开发语言·c++·笔记·安全·机器学习·c#·p/invoke
直奔標竿9 小时前
Java开发者AI转型第二十五课!Spring AI 个人知识库实战(四)——RAG来源追溯落地,拒绝AI幻觉
java·开发语言·人工智能·spring boot·后端·spring
24白菜头9 小时前
【无标题】
c++·笔记·学习·harmonyos
weixin_421725269 小时前
C语言常用字符串函数:长度、比较、拼接和查找
c语言·字符串函数·查找·比较·长度
charlie11451419110 小时前
嵌入式C++实践开发第21篇(单片机实践):按钮输入 —— 硬件原理、消抖与HAL API
开发语言·c++·单片机
AKDreamer_HeXY10 小时前
QOJ 12255 - 36 Puzzle 题解
数据结构·c++·数学·算法·icpc·qoj