Je suis novice en programmation jni. Je voudrais passer un tableau float de java à jni, allouer dynamiquement de la mémoire suffisante pour faire flotter un tableau dans jni side, stocker des valeurs dans jfloatArray, et y accéder dans java. Je ne veux pas retourner le jfloatArray, juste modifier le tableau float d'entrée passé. J'ai essayé la méthode ci-dessous, mais elle ne modifie pas mon tableau float java. Comment y parvenir?Programmation 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);
}
Je lis de pass data between Java and C que cela peut être réalisé en faisant passer un objet personnalisé. Cependant, je ne suis pas tout à fait sûr comment faire de JNI pour un objet java contenant tableau flottant comme celui-ci
public class CustomObject{
public float[] points;
public float[] getPoints() {
return points;
}
public void setPoints(float[] points) {
this.points = points;
}
}
Mais mon jni func a déjà un type de retour différent. Je ne peux pas retourner ça. C'est le problème principal. Je voudrais le prendre comme référence et modifier @konsolas –
@rsd_unleashed Java est la valeur de passage, y compris JNI. Tu ne peux pas faire ça. – EJP
Vous pouvez renvoyer un objet avec deux champs de JNI. Ou utilisez deux fonctions JNI pour les deux objets. – konsolas