Мне нужно вернуть массив значений структуры из C++ (jni) в java. У меня есть то структура C++ следующим образомНужно возвратить массив struct в c из jni в java (как массив объектов)
MyCStructure
{
byte *Data;
int dataLength;
int width;
int height;
}mycstr;
и у меня есть структура Java, как
public class MyJavaStructure
{
public byte[] Data;
public int dataLength;
public int width;
public int height;
}
И мой JavaMainClass.java является
MyJavaStructure[] mystr = MyJavaStructure[4];
public native int Process();
public LSImage getValues()
{
return this.mystr ;
}
public void setValues(MyJavaStructure bDetails)
{
this.mystr = bDetails;
}
Я попытался передать массив объектов (MyJavaStructure) непосредственно из JNI, используя GetMethodId из setValues.
Мой JNI код
JNIEXPORT jint JNICALL Java_TestJNI_Process(JNIEnv *jEnv, jobject jObj)
{
MyCStructure* mycstr = new MyCStructure[4];
iRet = Process(&mycstr);
jclass jClass = jEnv->GetObjectClass(jObj);
jmethodID constructor;
jmethodID jObjectID = jEnv->GetMethodID (jLegendClass, "setValues", "(LMyCStructure;)V");
if (jObjectID == NULL)
{
throwJavaException(jEnv, "Unable to find the method setValues");
return NULL;
}
jEnv->CallObjectMethod(jObj, jObjectID, (jobject *) mycstr);
printf ("After setting the output data value\n");
jEnv->DeleteLocalRef(jClass);
return iRet;
}
Значение, возвращенное в mycstr содержит 4 массив структуры (MyCStructure) значений, и я попытался назначить в объект класса MyJavaStructure но он возвращается нуль.
Я делаю это правильно или я должен что-то изменить?
Если бы это была одна структура, я могу использовать Get/Set Fields. Мне нужно передать массив структуры. «Mycstr» содержит структуру с 4 значениями. – Narayan
Ваш java-метод 'setValues (MyJavaStructure bDetails)' принимает один экземпляр, а не массив, поэтому он не будет работать в любом случае. Итак, вам нужно обернуть массив в класс и иметь методы 'setDataLength (indexInArray, value)' и подобные, и вызвать их над JNI. На самом деле нет обхода, как напрямую передать объекты C на Java. –
ok Я найду подходящий способ и отправлю его – Narayan