JNIの使い方

1440 ワード

作用: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.DLSchema
        コンパイルするとtest_が生成されます。DLSchema.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;
 }