在Java领域
public class JNI{
static{ System.loadLibrary("jni");}
public float dataArray[] = new float[5];
public float data;
}
在JNI c ++字段中
Java_example_JNI_setData(JNEEnv *env, jobject instance){
jclass jclass1 = (*env).GetObjectClass(instance);
jfieldID jfieldID1 = (*env).GetFieldID(jclass1, "data", "F");
jfloat var1 = 1.0f;
(*env).setFloatField(instance, jfieldID1, var1);
float var[5] = {1.f, 2.f, 3.f, 4.f, 5.f};
}
//如何将dataArray设置为var? //或者如何使用“SetFloatArrayRegion”不返回值。
答案 0 :(得分:0)
float
是java原始类型,它们与机器相关的本机类型是jfloat
因此,您需要将float
映射为jfloat
内部java类,即实现本机方法的类。
答案 1 :(得分:0)
您可以使用此方法:
JNIEXPORT void JNICALL Java_recipeNo013_PassArrayBack_passFloatArray
(JNIEnv *env, jclass obj, jfloatArray array) {
/* get size of the array */
jsize len = (*env)->GetArrayLength(env, array);
/* get the body of array; it will be referecende by C pointer */
jfloat *body = (*env)->GetFloatArrayElements(env, array, 0);
/* do some stuff */
for(int i=0; i < len; i++) {
printf("Float value: %f\n", body[i]);
/* update value */
body[i] = 0;
}
/* release body when you decide it is no longer needed
Do not pass changes back to Java */
(*env)->ReleaseFloatArrayElements(env, array, body, JNI_ABORT);
}
更多信息可以在这里找到:http://jnicookbook.owsiak.org/recipe-No-013/
至于访问从Java传递到C的对象的字段,你可以在这里找到一些信息: