我有一个用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个数组?
答案 0 :(得分:2)
jobjectArray
不是指向数组第一个元素的指针。请记住,Java数组本身就是一流的对象。
fid
为0,因为您在类中寻找成员m_session
,该成员表示Java类Record
的数组;当然数组类没有这样的成员。您需要执行FindClass()
来获取Record
类,然后在那里查找该成员。
然后您继续尝试设置该成员。如果它实际上是Record
类的成员,我想你想在循环中设置每个数组元素中该成员的值,是吗?当然不是在阵列本身,正如你想要做的那样。对于每个数组元素,您需要调用适当的方法来获取该数组位置中的对象,然后对该对象进行操作。