JNI と JNA を対比する場合最も顕著な違いは、関数のマッピングの方法です。
まずシンプルな例を考えて見ましょう。
C/C++で「hello」という関数があったとします。
JNA では Library クラスを継承したインターフェースに hello というメソッドを宣言します。
public interface CLibrary extends Library {
void hello();
}もちろん「hello」という関数は、呼び出す側のC言語のソースコードで宣言しているものとします。
例えば C 言語のコードは以下のようにすることができます。
#include <stdio.h>
void hello() {
printf("Hello World!\n");
}これで関数のマッピングは終わりです。C言語ソースコードをコンパイルビルドして、共有ライブラリを生成して、Javaクラスから呼び出すことができます。
Copyright 2018-2019, by Masaki Komatsu