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インターフェースクラス:
コマンド:javah test.DLSchema
コンパイルするとtest_が生成されます。DLSchema.hのファイル:
C部分コール:
作成過程:
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;
}