в JNI, как назначить значения для jobjectArray? - PullRequest
3 голосов
/ 11 июля 2011

У меня есть массив объектов, который инициализируется в 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 0-му массиву jRecords?

1 Ответ

2 голосов
/ 11 июля 2011

A jobjectArray - это , а не указатель на первый элемент массива. Помните, что массивы Java сами по себе являются первоклассными объектами.

fid равно 0, потому что вы ищете члена m_session в классе, представляющем массив класса Java Record; конечно, у класса массива нет такого члена. Вам нужно сделать FindClass(), чтобы получить класс Record, а затем найти там члена.

Затем вы продолжаете пытаться установить этого члена. Если это на самом деле член класса Record, я думаю, вы хотите установить значение этого члена в каждом элементе массива в цикле, да? Конечно, не в самом массиве, как вы пытаетесь сделать. Для каждого элемента массива необходимо вызвать соответствующий метод, чтобы получить объект в этой позиции массива, а затем оперировать этим объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...