JavaからC++を実行する


JavaからC/C++ライブラリの使用方法を示します。
次に示しているのは、今回使用するファイルの説明です。

ファイルはこちら(Windows版)をクリックしダウンロードしてください。
Solaris版

ファイル名 内容
cnp.bat 作成から実行までを行うバッチファイルです。
*ファイルの格納先は”D:\jdk1.1.4\source\Test4”という前提です。
Test4.h C/C++ライブラリのヘッダーファイルです。
Test4.cpp C/C++ライブラリのソースファイルです。
Test4J.java C/C++ライブラリを使用するJavaソースです。
Test4J.cpp Javaのclassファイルを元にJNIによって作成されるヘッダーを実装したものです。
今回はクラスを実体化させメソッドにアクセスしています。

概要全体


@既存のC/C++ライブラリを用意します。

ファイル名:Test4.h
#include<windows.h>

class CTest4
{
      public:
            CTest4();
            int Print();
};


ファイル名:Test4.cpp
#include "Test4.h"
#include<stdio.h>

BOOL APIENTRY DllMain( HANDLE hModule,
                                     DWORD ul_reason_for_call,
                                     LPVOID lpReserved
                                   )
{
     return TRUE;
}

CTest4::CTest4()
{
     return;
}

CTest4::Print()
{
     printf("C++関数が出力しています←これ");
     return 1;
}


AC/C++ライブラリのコンパイル/リンクを行う
cl -Id:\jdk1.1.4\include -Id:\jdk1.1.4\include\win32 -LD -FeTest4.dll Test4.cpp
*上記場合はJDK1.1.4をd:\jdk1.1.4\ディレクトリにインストールした場合です。
作成されるファイル:Test4.dll

BC/C++ライブラリ関数をを使用するJavaソースを作成します。

ファイル名:Test4J.java
public class Test4J
{
      static
      {
            System.loadLibrary("Test4J");
      }
      public static native void Print();

      public static void main(String[] args)
      {
            Print();
      }
}


Cjavacコマンドを使用しクラスファイルを作成します。
javac Test4J.java
作成されるファイル:Test4J.class

DJNIヘッダーを作成
javah -jni Test4J
作成されるファイル:Test4J.h

EJNIヘッダに対応する実装を行う

ファイル名:Test4J.cpp
#include "Test4.h"
#include "Test4J.h"

JNIEXPORT void JNICALL Java_Test4J_Print(JNIEnv *env, jclass c)
{
      CTest4 *p = new CTest4();
      p->Print();
}

作成されるファイル:Test4.dll


FJNIモジュールの作成
cl -Id:\jdk1.1.4\include -Id:\jdk1.1.4\include\win32 -LD -FeTest4J.dll Test4J.cpp Test4.cpp
作成されるファイル:Test4J.dll

G実行
java Test4J