私はC++とjniを使って自分自身にアンドロイドのndkを教えるための自分の小さなプロジェクトを乱してきましたが、どのようにjava floatからデータを渡すかわかりません配列をC++配列にコピーします。私はjniセットアップを使用しました。私が見つけたチュートリアルは、あまりにも単純すぎるし、十分に説明していないか、あまりにも複雑で、現時点で私の理解を超えています。ですから、javaからC++に渡された配列の簡単な例を指摘し、データに対して実行されたいくつかのメソッド/関数をjavaに送り返すことができます。C++とJNI - jfloatArrayに配列を渡す方法
Heres私の試みはこれまでのところですが、途中で2つのエラーが残っています。私は構文の残りの部分はどちらでもparのどちらかがわかりませんが、コンパイル時に何も表示されません。
#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;
};
}
そして、これらは、あなたが直接jfloatArrayを使用することはできませんコンパイル時に
$ /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
ねえ、これは簡単なJNIテストアプリを取得した場合のおかげでポールが.....私は病気がすべてのソースでそれをここに掲示してください作業しています:) –
私は感謝思い付いたHERESにちょっとソリューションあなたの助けに:) http://stackoverflow.com/questions/8543221/android-a-simple-ndk-project-using-the-eigen-library-and-jni –