java如何调用dll
Java 调用 DLL 的方法
Java 调用 DLL(动态链接库)通常通过 Java Native Interface (JNI) 实现。以下是具体步骤:
编写 Java 类并声明 native 方法
创建一个 Java 类,声明需要调用的 native 方法,并使用 System.loadLibrary() 加载 DLL 文件。
public class NativeDemo {
// 声明 native 方法
public native void sayHello();
// 加载 DLL 文件
static {
System.loadLibrary("NativeDemo");
}
public static void main(String[] args) {
new NativeDemo().sayHello();
}
}
生成头文件
使用 javac 编译 Java 类,然后通过 javah 生成 C/C++ 头文件。
javac NativeDemo.java
javah -jni NativeDemo
实现 native 方法
根据生成的头文件编写 C/C++ 实现,并编译为 DLL 文件。
#include "NativeDemo.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_NativeDemo_sayHello(JNIEnv *env, jobject obj) {
printf("Hello from DLL!\n");
}
编译 DLL 文件
使用编译器(如 GCC 或 Visual Studio)将 C/C++ 代码编译为 DLL 文件。
gcc -shared -o NativeDemo.dll NativeDemo.c -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32"
运行 Java 程序
将生成的 DLL 文件放在 Java 库路径中,运行 Java 程序即可调用 DLL 中的方法。
java NativeDemo
注意事项
- DLL 文件名需与
System.loadLibrary()中指定的名称一致(无需扩展名)。 - 确保 Java 环境和编译器兼容(如 32/64 位一致)。
- 路径问题需注意,DLL 文件应放在系统库路径或通过
-Djava.library.path指定。
替代方案
对于简单的 DLL 调用,也可以使用 JNA(Java Native Access)库,无需编写 C/C++ 代码:
import com.sun.jna.Library;
import com.sun.jna.Native;
public class JNADemo {
public interface CLibrary extends Library {
CLibrary INSTANCE = Native.load("user32", CLibrary.class);
void MessageBoxA(int hWnd, String text, String caption, int type);
}
public static void main(String[] args) {
CLibrary.INSTANCE.MessageBoxA(0, "Hello via JNA", "JNA Demo", 0);
}
}






