|
在Java中,可以通过Java Native Interface(JNI)或Java Native Access(JNA)来调用DLL(动态链接库)文件中的方法。以下是两种主要方法的简要介绍和示例代码。 ___ 使用JNI调用DLL 1. 编写DLL文件: - 使用C或C++编写DLL文件,并在Windows上使用Microsoft Visual Studio或其他编译器生成DLL文件。 2. 创建Java本地方法: - 在Java代码中声明本地方法,使用`native`关键字。 3. 生成JNI头文件: - 使用`javah`命令(Java 8及之前版本)或`javac -h`命令(Java 9及之后版本)生成JNI头文件。 4. 实现Java本地接口: - 在C或C++中实现DLL文件,将Java本地方法映射到DLL中的方法。 5. 加载并调用DLL: - 在Java代码中使用`System.loadLibrary()`方法加载DLL文件,并调用本地方法。 示例代码: ```java filename="MyClass.java" public class MyClass { // 声明本地方法 public native void myDllMethod(int arg1, String arg2); static { // 加载DLL文件 System.loadLibrary("mydll"); } public static void main(String[] args) { MyClass obj = new MyClass(); obj.myDllMethod(123, "hello"); } } ``` ```c filename="MyClass.c" include <jni.h> include "MyClass.h" include <stdio.h> JNIEXPORT void JNICALL Java_MyClass_myDllMethod(JNIEnv *env, jobject obj, jint arg1, jstring arg2) { const char str = (env)->GetStringUTFChars(env, arg2, 0); printf("arg1: %d, arg2: %s", arg1, str); (*env)->ReleaseStringUTFChars(env, arg2, str); } ``` 使用JNA调用DLL JNA(Java Native Access)提供了一个更简单的方式来调用本地库,无需编写JNI代码。 1. 添加JNA依赖: - 在项目中添加JNA库依赖,可以通过Maven或Gradle添加。 2. 定义接口: - 定义一个Java接口,继承自`com.sun.jna.Library`,并在接口中声明本地方法。 3. 加载并调用DLL: - 使用接口的实现类加载DLL文件,并调用本地方法。 示例代码: ```java filename="