Posts Tagged ‘JNI’

  1. 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!