JNI使用方式

作用:使Java能够同C/C++动态库(dll)进行交互。


编写过程:

    1、native接口类,其中方法用native修饰,没有方法体。

    2、通过javah命令编译native接口类,会生成.h的头文件。

    3、用C编写一个dll文件

        (1)需要引入刚生成的.h头文件

        (2)实现头文件中的方法(会对应到native接口类中的方法)。

        (3)方法中正常调用dll文件即可。

    4、特殊变量的参数和返回值,使用方式可以参看jni.h中的java类型与c类型转换的相关方法。


代码例子:

    native接口类:

 public class DLLSchema {
    /* 参数和返回值可以根据需要 */
    public native int test (int param);
 }

    程序调用方式:

 public class DLLCall {
    static {
        /* 加载DLL文件,不用加后缀名 */
        System.loadLibrary("dll");
    }

    public void call() {
        DLLSchema dll = new DLLSchema();
        int result_int = dll.test(100);
    }
 }

    javah:

        命令:javah test.DLLSchema

        编译后会生成一个 test_DLLSchema.h 的文件:

    C部分调用:

 #include <stdio.h>
 #include <Windows.h>
 
 #include "com_loong_demo_jni_DLLSchema.h"
 
 // 加载指定dll
 HINSTANCE Hint = ::LoadLibrary("dll.dll");
 
 // 实现方法体
 JNIEXPORT jint JNICALL Java_test_DLLSchema_test(JNIEnv *, jobject, jint param) {
     // 新建函数类型
     typedef int (*TEST)(int param_);
     // 获取调用函数
     TEST _test = (TEST)GetProcAddress(Hint,"TEST");
     // 调用函数
     int result = _test(param);
     return result;
 }


你可能感兴趣的:(JNI使用方式)