我现在一直在寻找一些方法来解决这个问题,但我发现没有任何东西可以正确回答这个问题。我想我已经很接近了;我需要一个 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/:请随意提出方法!
谢谢大家
最佳答案
如果我很好地理解您的问题,这应该对您有用。您似乎对 int
/jint
转换感到不安,但您不必这样做,因为 jint
只是 int< 的 typedef/
.
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;
}
如果有任何不清楚的地方,或者我是否误解了您的问题,请告诉我!
关于java - 从普通 c int[] 组成 jintArray 的 JNI 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637525/