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