java dll 如何调用
使用 JNI 调用 DLL
Java 通过 Java Native Interface (JNI) 调用 DLL 文件。需要编写本地方法声明和对应的 C/C++ 实现,生成 DLL 后由 Java 加载。
在 Java 类中声明 native 方法:
public class NativeDemo {
public native void demoMethod();
}
使用 javac 编译 Java 文件,然后通过 javah 生成头文件:
javac NativeDemo.java
javah -jni NativeDemo
实现 C/C++ 函数并编译为 DLL:
#include "NativeDemo.h"
JNIEXPORT void JNICALL Java_NativeDemo_demoMethod(JNIEnv *env, jobject obj) {
printf("Called from DLL\n");
}
使用 JNA 简化调用
Java Native Access (JNA) 库提供更简单的方式直接调用 DLL,无需编写本地代码。
添加 JNA 依赖:
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.13.0</version>
</dependency>
定义接口映射 DLL 函数:
public interface MyDLL extends Library {
MyDLL INSTANCE = Native.load("mydll", MyDLL.class);
void demoMethod();
}
使用 System.load 加载 DLL
将编译好的 DLL 文件放在系统路径或指定路径,通过 System.load 加载:
public class LoadDLL {
static {
System.load("C:/path/to/mydll.dll");
}
}
处理 32/64 位兼容性
确保 Java 运行时环境 (JRE) 位数与 DLL 位数匹配。32 位 JRE 只能加载 32 位 DLL,64 位 JRE 需要 64 位 DLL。
检查 JRE 位数:
java -version
异常处理
捕获 UnsatisfiedLinkError 处理 DLL 加载失败:

try {
System.loadLibrary("mydll");
} catch (UnsatisfiedLinkError e) {
System.err.println("DLL load failed: " + e.getMessage());
}






