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了。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值