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!

Tags:

Categories: C++, Java, JNI, library

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WP-SpamFree by Pole Position Marketing