java中使用JNA调用C/C++动态链接库中的函数

C++部分

创建动态库项目

image

image

注意:动态库中的头文件,必须要将需要导出的函数包裹在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>

工程结构

image

将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);
    }
}

jna 提供C与JAVA数据类型映射

image

参考

Java使用jna调用c开发的动态库dll文件

在Windows上使用CMake编译64位dll

posted @     阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 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 比较器示例
点击右上角即可分享
微信分享提示