java调用DLL保姆级教程

工作中有部分业务需要调用三方的dll文件,在网上搜集资料后测试调用成功,如下笔记希望能帮到你们!

Java可以使用Java Native Interface (JNI)来调用DLL文件。

1. 定义Native方法:使用Java的关键字“native”定义Java的方法,这个方法将在DLL文件中被实现。

2. 生成Java头文件:使用Java Development Kit中的Javah工具会生成一个C头文件(JavaNativeInterface.h)。

3. 创建一份C源文件,并实现JNI方法:导入生成的JavaNativeInterface.h头文件、实现Java方法中的native方法,并声明一个JNIEXPORT返回类型与Java方法返回类型相同的函数。

4. 将生成的C源文件编译成DLL文件:在Visual Studio中创建一个DLL项目并将源文件添加进来。生成DLL文件。

5. 加载DLL文件并调用方法:在Java中使用System.loadLibrary() API加载DLL文件。然后就可以使用Java的native方法来调用DLL文件中的函数了。

以下是代码示例,要使用此示例,首先需要使用Visual Studio进行两个步骤:

(1)编写DLL项目代码

(2)生成DLL库。

Dll_Test.h:


#ifndef __DLL_TEST_H__
#define __DLL_TEST_H__
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jint JNICALL Java_com_zeroin_myapp_DllTest_nativeAdd
  (JNIEnv *, jobject, jint, jint);
JNIEXPORT jstring JNICALL Java_com_zeroin_myapp_DllTest_nativeHelloWorld
  (JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif

Dll_Test.c:


#include "com_zeroin_myapp_DllTest.h"
JNIEXPORT jint JNICALL Java_com_zeroin_myapp_DllTest_nativeAdd(JNIEnv *env, jobject obj, jint a, jint b)
{
    return a + b;
}
JNIEXPORT jstring JNICALL Java_com_zeroin_myapp_DllTest_nativeHelloWorld(JNIEnv *env, jobject obj)
{
    return (*env)->NewStringUTF(env, "Hello from DLL!");
}

在Visual Studio中生成此项目,你将得到一个名为“Dll_Test.dll”的DLL文件。

然后在Java中,你可以通过以下方式来使用DLL:


// 加载DLL库
System.loadLibrary("Dll_Test");
public class DllTest {
    // 原生方法,与DLL中的native方法对应
    public native int nativeAdd(int a, int b);
    public native String nativeHelloWorld();
    // 测试
    public static void main(String[] args) {
        DllTest dll = new DllTest();
        // 调用nativeAdd方法
        System.out.println(dll.nativeAdd(1, 2));
        // 调用nativeHelloWorld方法
        System.out.println(dll.nativeHelloWorld());
    }
}

通过上述步骤,Java就可以成功使用DLL了。