java中使用JNA调用C/C++动态链接库中的函数
C++部分
创建动态库项目
注意:动态库中的头文件,必须要将需要导出的函数包裹在extern "C" {}中,否者在使用侧java工程中,就无法加载并使用
JAVA部分
pom依赖
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.18</version>
</dependency>
<dependency>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
<version>3.0.9</version>
</dependency>
</dependencies>
工程结构
将C++项目编译出的动态链接库复制到java项目的resources目录下以供jna库加载并使用
测试类
import cn.hutool.core.io.FileUtil;
import com.sun.jna.Library;
import com.sun.jna.Native;
public interface DllDemo extends Library {
// 绝对路径方式加载
// DllDemo instance = (DllDemo) Native.loadLibrary("D:\\code\\test\\myTestNett\\src\\main\\resources\\libdlldemo.dll", DllDemo.class);
// 类路径方式加载
DllDemo INSTANCE = (DllDemo) Native.loadLibrary(FileUtil.getAbsolutePath("libdlldemo.dll"), DllDemo.class);
// 方法映射1
void hello();
// 方法映射2
int add(int a, int b);
// 测试
public static void main(String[] args) {
DllDemo.INSTANCE.hello();
int res = DllDemo.INSTANCE.add(1, 2);
System.out.println(res);
}
}
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2022-09-17 一些前端资源收集
2022-09-17 前端语言的一些理解
2021-09-17 理解java回调机制
2021-09-17 Comparator 比较器示例