0

私はこの問題を解決する方法を理解するために少し探していましたが、私が見つけたものは何もこの質問に正しく答えていません。私は近くにいると思います。jint*とint*が必要で、(* env)-> SetIntArrayRegion(...)関数を使用します。

//  This function will take an array of global integers that already exist in the
//  c-side of the program, we'll call them 'data_ints[91]' (there are 91 just to clarify.)
/*...*/
int data_ints[] = {1,2,3,4,/*...*/90,91};

JNIEXPORT jintArray JNICALL Java_MarsRoverGUI_getData
(JNIEnv *, jobject, jint)
{
    jintArray out_ints;
    jint *outElements;
    int i;

    out_ints = (*env)->NewIntArray(env, 91);
    outElements = (*env)->GetIntArrayElements(env,out_ints,0);
    for (i = 0; i < 91; i++)
    {
        outElements[i] = data_ints[i];
    }
    (*env)->ReleaseIntArrayElements(env,out_ints,outElements,0);

    // returns data_ints as a jintArray
    return out_ints;
}

私はどれだけ近いですか?JNIをテストする効果的な方法がありません/:方法を提案してください!

グラツィエすべて

4

1 に答える 1

1

あなたの問題をよく理解していれば、これでうまくいくはずです。int/変換に邪魔されているようですが、 の typedef であるためjint、その必要はありません。jintint

JNIEXPORT jintArray JNICALL Java_MarsRoverGUI_getData
(JNIEnv *, jobject, jint)
{
    jintArray out_ints;

    out_ints = (*env)->NewIntArray(env, 91);
    (*env)->SetIntArrayRegion(env, out_ints, 0, 91, data_ints);

    // returns data_ints as a jintArray
    return out_ints;
}

何か不明な点がある場合、または質問を誤解した場合は教えてください。

于 2012-11-30T09:06:44.807 に答える