私はJNIでの経験はありませんが、私は与えられたコードの一部を変更する必要があります。私のC++コードでJNI経由で2D配列の代わりに通常の1D配列を取得するには?
、私は、この方法は、(Java側コードを呼び出す)定義されている:
JNIEXPORT void JNICALL sumTraces
(JNIEnv* env, jclass caller, jobjectArray jPrestackArrays, jint count) {
jPrestackArrays jobjectArrayは、Java側によって渡さ2D float配列[] []です。上記のコードの後です:
float** prestack2D = (float**)malloc(nTracesIn * sizeof(float*));
for (int j = 0; j < count; j++) {
jfloatArray floatArrayJ = (jfloatArray)env->GetObjectArrayElement(jPrestackArrays, j);
prestack2D[j] = (float*)env->GetPrimitiveArrayCritical(floatArrayJ, &isCopy);
}
とコードはで終了します。
for (int j = 0; j < count; j++) {
jfloatArray floatArrayJ = (jfloatArray)env->GetObjectArrayElement(jprestackTraces, j);
env->ReleasePrimitiveArrayCritical(floatArrayJ, prestack2D[j], JNI_ABORT);
}
そしてそうそれは私がC++コードで使用できる2次元配列を与えます。
しかし、私は(float ** prestack2Dがfloat * prestack1Dになるような)で渡す通常の1D float配列[]にするために、このコードを変更する必要があります。
通常のフロート配列を取得するために正確に何を変更しますか?私は幸運とGetObjectFieldとGetFloatArrayElementsを試してみました。私はこれが本当に簡単な質問ですが、私はJNIに関する経験がなく、今は疲れていると言いましたが、JNIの文書は私が慣れていたものほど良くはないと思います。
2Dから1Dへのマッピング(行* number_columns +列)を使用して1Dフルタイムで滞在しましたか? – user4581301
[JNIを使用してfloat \ *をjfloatArrayに変換]の可能な複製(http://stackoverflow.com/questions/25011597/convert-float-to-jfloatarray-using-jni) –