Posts Tagged ‘JNI’
-
Hello, JNI World!
Posted on 4月 10th, 2012 by cx20
JNI
JNA(Java Native Interface)は、Java と他の言語のインターフェイス仕様である。
Java から C言語のライブラリの呼び出し、また、C言語から Java のライブラリの呼び出し等が可能である。
ここでは、C言語から Java のライブラリの呼び出しのサンプルを記載する。ソースコード(呼び出す側(C++))
#include <jni.h> int main( int argc, char* argv[] ) { JNIEnv* env; JavaVM* jvm; // Java VM オプション設定 JavaVMOption options[1]; options[0].optionString = "-Xmx128m"; JavaVMInitArgs vm_args; vm_args.version = JNI_VERSION_1_6; vm_args.options = options; vm_args.nOptions = 1; // Java VM 作成 JNI_CreateJavaVM(&jvm, (void **)&env, &vm_args); // Class 検索 jclass clazz = env->FindClass("Hello"); // Method ID 取得 jmethodID mid = env->GetStaticMethodID(clazz, "main", "([Ljava/lang/String;)V"); // Class メソッド呼び出し env->CallStaticVoidMethod(clazz, mid, NULL); // Java VM 破棄 jvm->DestroyJavaVM(); return 0; }
ソースコード(呼び出される側(Java))
public class Hello { public static void main( String[] args ) { System.out.println( "Hello, JNI World!" ); } }
コンパイル&実行方法
$ javac Hello.java $ c++ -o jnihello jnihello.cpp ¥ -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/ ¥ -framework JavaVM ¥ -m64 $ ./jnihello
実行結果
Hello, JNI World!