私はプログラミングの初心者です。 float配列をjavaからjniに渡し、jni側で浮動配列に動的に十分なメモリを割り当て、jfloatArrayにいくつかの値を格納し、javaでアクセスしたいと思います。私はjfloatArrayを返す必要はありません、渡された入力float配列を変更するだけです。私は以下のメソッドを試しましたが、私のjava float配列は変更されていません。これを達成する方法は?JNIプログラミング
Java Code:
float[] pointList = null;
outputBitmap = callJNIFunc(pointList, inputBitmap);
JNI Code:
Bitmap callJNIFunc(JNIEnv *env, jfloatArray pointListInPixels, jobject inputBitmap) {
pointListInPixels = (env)->NewFloatArray(pointListSize.M * 2);
env->SetFloatArrayRegion(pointListInPixels, 0, pointListSize.M * 2, pointFloats);
}
私は、これはカスタムオブジェクトを渡すことによって達成することができることをpass data between Java and Cから読み取ります。しかし、私はあなたのJNI関数の最初の行で、この
public class CustomObject{
public float[] points;
public float[] getPoints() {
return points;
}
public void setPoints(float[] points) {
this.points = points;
}
}
しかし、私のjni funcは既に別の戻り値の型を持っています。私はこれを返すことはできません。それが主な問題です。私はそれを参考にして@konsolasを変更したいと思います –
@rsd_unleashed JavaはJNIを含む値渡しです。あなたはこれをすることはできません。 – EJP
JNIから2つのフィールドを持つオブジェクトを返すことができます。または、2つのオブジェクトに対して2つのJNI関数を使用します。 – konsolas