Я пытался посмотреть на кучу форумов, и, несмотря на множество настроек и повторного анализа, я немного застрял.
Я пытаюсь вернуть jdoubleArray через JNI из моего кода C ++, но кажется, что вводимые мной значения не передаются. Вот код.
jdoubleArray ret = env->NewDoubleArray(2);
jdouble* rotationsJ = (jdouble *) malloc(2*sizeof(jdouble));
rotationsJ[0] = 4; //whatever, some dummy values.
rotationsJ[1] = 4;
cout<<"Rotations 0..."<<rotationsJ[0]; //Java console tells me this is 4, as it should.
env->SetDoubleArrayRegion(ret, 0, 2, (const jdouble*)rotationsJ);
return ret;
//EDIT - my java code looks like the following
double[] rotations = new double[2];
rotations = pnMain.rotateLeftRight(true); //PNMain is the calling class, rotateLeftRight returns a jDoubleArray.
//Was wondering if my Java declaration of rotations is needed?
Теперь в коде Java возвращаемый массив из кода C обнуляется. Я не могу изменить его значения. Я думаю, что использование функции SetDoubleArrayRegion (надеюсь) заставит массив 'ret' содержать содержимое rotationsJ, но это не работает. Я просто получаю массив из двух элементов, значения которых равны 0.0, которые передаются мне обратно в Java.
Любая помощь / вопросы приветствуются.
РЕДАКТИРОВАТЬ - я могу добавить больше информации к этому. Я пытался сделать:
jboolean isCopy;
jdouble* test = env->GetDoubleArrayElements(ret, &isCopy);
cout<<"Test ..."<<test[1]; //This actually printed out the second element's value in Java.
Итак, дополнительное утверждение печати я решил опробовать - я копирую то, что пытаюсь вернуть, в другой буфер в C, и просто пытаюсь распечатать его. Это на самом деле отражает значение, будучи настроенным только с использованием 'ret'. Может ли быть какая-то проблема в операторе возврата / в настройке кода Java?