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