長々と取りとめもなく書きましたが、ここでまとめます。
- Java→ネイティブ(Javaプログラムからネイティブライブラリを使用する場合)
- Javaプログラムの作成(nativeメソッドを使用)
- javahを使用してヘッダファイルの作成
- ヘッダファイルを使用して、ライブラリの作成
- ライブラリをPATHに通した状態で使用
- ネイティブ→Java(ネイティブプログラムから、Javaプログラムを使用する場合)
- C言語で、JVMの起動からメソッドの実行などのロジックを記述
- ヘッダファイルと、インポートライブラリを使用してコンパイル
- jvm.dllをPATHに通した状態で実行
※Borland C++ Compilerを使用する場合は、jvm.libをそのまま使用せずに、
implibというツールを使って、bcc32用に変換する。
色々使ってみましたが、「ネイティブプログラムからJavaを使用する」というサンプルは、あまり使い道がないと思います。
PATHを通す個所がはっきりしないので、単にJavaプログラムを起動するだけであれば、java.exeを実行した方が楽です(でも、この場合はプロセスが起動します)
使い道としては、Java言語で作成されたメソッドを、どうしても使いたい場合などには使用するぐらいだと思います。
そういう場合は普通はJavaプログラムをネイティブに取り込むのではなく、Javaプログラムと連携したほうがよいと思われるわけです。
JNIについて詳しく書かれた貴重な一冊。
JNIプログラミング時に必携の本です。ちなみにJNIについての書籍は、ほとんどありませんが、バイブルといえる本がこれです。
JNIでの開発は情報量が少なくて、プログラムを作成して実際に動作を確認しても、「本当にこれで間違っていないのか?」とか「たまたま動いているだけでメモリリークしているのでは?」とかちょっぴり不安になることも多いです。
この書籍では、JNIプログラミングについて具体的に書いてあります。JNI関係のAPIを使った時に、JVMがどのように動作させるのかを考えながら解説されているため、安全なJNIプログラミングができると思います。
ちょっと高い書籍ですが、JNI開発時には欠かせないバイブルだと思います。