Javaで用意した配列にJNIで値を格納して返す

      2018/06/13

Javaで用意した配列にJNI(Native)側で値を設定する方法です。

Javaで用意したプリミティブ型配列にJNIで値を設定

sample(JNIEnv *jenv, jobject jobj, jintArray jvalues)
{
    // 配列数取得
    jsize length = jenv->GetArrayLength(jvalues);

    // 配列への値設定
    jint * intArray = jenv->GetIntArrayElements(jvalues, NULL);
    intArray[0] = 10;
    jenv->ReleaseIntArrayElements(jvalues, intArray, 0);
}

Javaで用意した文字列配列にJNIで値を設定

sample(JNIEnv *jenv, jobject jobj, jobjectArray jvalues)
{
    const char *p_txt1 = "abcd";
    const char *p_txt2 = "トム to ジェリー";
    const char *p_txt3 = "efgh";

    // 配列数取得
    jsize length = jenv->GetArrayLength(jvalues);

    jstring jstr1 = jenv->NewStringUTF(p_txt1);
    jenv->SetObjectArrayElement(jvalues, 0, jstr1);
    jstring jstr2 = jenv->NewStringUTF(p_txt2);
    jenv->SetObjectArrayElement(jvalues, 1, jstr2);
    jstring jstr3 = jenv->NewStringUTF(p_txt3);
    jenv->SetObjectArrayElement(jvalues, 2, jstr3);
}

上記サンプルのソースファイルはUTF-8で保存です。

 - Android