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++ライブラリを用意します。
#include<windows.h> class CTest4 { public: CTest4(); int Print(); }; |
#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ソースを作成します。
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ヘッダに対応する実装を行う
#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