我有一个对象数组,在Java中初始化如下:
Record[] pRecords = new Record[5];
ret = GetRecord(pRecords);
我将这个数组传递给JNI,JNI会调用CPP,最终填充数组。
JNIEXPORT jint JNICALL Java_GetRecord
(JNIEnv *jEnv, jobject ObjApp, jobjectArray jRecords)
{
Record *pRecords = (Record *)malloc(5*sizeof(Record ));
ret = Get_Record(pRecords); // call to CPP
if(SUCCESS == ret)
{
jclass c = (jEnv)->GetObjectClass(jRecords);
jfieldID fid = (jEnv)->GetFieldID(c, "m_session", "I");
(jEnv)->SetIntField (jRecords, fid, pRecords [0].value);
}
}
我得到了 fid
是 NULL
。如何将 pRecords[0].value
赋值给 jRecords
数组的第 0 个元素?
null
元素的数组--也就是说,您需要创建Record
对象。在Java中创建数组后再将其传递会更简单一些。然后在JNI代码中循环遍历该数组,调用getObjectArrayElement(env, jRecords, i)
五次以获取Record
对象,并设置每个对象中的成员。您的成员设置代码基本上没问题,只是应用于错误的对象。 - Ernest Friedman-HillRecord[] pRecords = new Record[5]; for (int i=0; i<5; ++i) pRecords[i] = new Record(); ret = GetRecord(pRecords);
- Ernest Friedman-Hill