Я возился со своим собственным небольшим проектом, чтобы научить себя Android ndk с использованием c ++ и jni, но я не могу понять, как передать данные из массива java float в массив c ++. Я использовал настройку JNI. Большинство учебных пособий, которые я нахожу, либо слишком просты и недостаточно объяснительны, либо слишком сложны и в настоящее время выходят за рамки моего понимания. Итак, может кто-нибудь просто указать мне на простой пример массива, передаваемого из Java в C ++, затем выполнить какой-либо метод / функцию над данными и отправить обратно в Java.
Вот моя попытка, но у меня остались две ошибки. Я не уверен, что остальная часть синтаксиса тоже на высоте, но я ничего не вижу во время компиляции.
#include <iostream>
#include <Eigen/Dense>
#include <math.h>
#include <jni.h>
using namespace Eigen;
Vector3f vec;
Vector3f vec2;
Vector3f vecRtrn;
void vecLoad(float x, float y, float z, float x2, float y2, float z2){
vec(0) = x;
vec(1) = y;
vec(2) = z;
vec2(0) = x2;
vec2(1) = y2;
vec2(2) = z2;
}
void vecAdd(Vector3f vecA, Vector3f vecB){
vecRtrn = vecA+vecB;
}
extern "C"
{
JNIEXPORT jfloatArray JNICALL Java_jnimath_act_JnimathActivity_test
(JNIEnv *env, jobject obj, jfloatArray fltarray1, jfloatArray fltarray2){
float array1[3];
jfloatArray flt1 = fltarray1;
jfloatArray flt2 = fltarray2;
//flt1 = env->GetFloatArrayElements( fltarray1,0);
//flt2 = env->GetFloatArrayElements( fltarray2,0);
vecLoad(flt1[0], flt1[1], flt1[2], flt2[0], flt2[1], flt2[2]);
vecAdd(vec, vec2);
array1[0] = vecRtrn[0];
array1[1] = vecRtrn[1];
array1[2] = vecRtrn[2];
return array1;
};
}
А это ошибки во время компиляции
$ /cygdrive/c/android-ndk-r7/ndk-build
Compile++ thumb : test <= test.cpp
jni/test.cpp: In function '_jfloatArray* Java_jnimath_act_JnimathActivity_test(JNIEnv*, _jobject*, _jfloatArray*, _jfloatArray*)':
jni/test.cpp:42: error: cannot convert '_jfloatArray' to 'float' for argument '1' to 'void vecLoad(float, float, float, float, float, float)'
jni/test.cpp:49: error: cannot convert 'float*' to '_jfloatArray*' in return
make: *** [obj/local/armeabi/objs/test/test.o] Error 1