Bonjour,
je débute en jni et j'ai un petit peut de mal.
En fait j'ai crée un objet en java qui contient un attribut double. Dans ce programme j'utilise un méthode native avec en paramètre l'objet et cette méthode va modifier ce double dans le programme c et renvoyer l'objet vers le programme java. Je ne sais pas vraiment quelles fonction C utiliser alors j'ai essayer quelque chose mais ça ne marche pas.
Si quelqu'un pouvais m'aider ça serai sympa.
merci d'avance

code java:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.*;
 
public class JNIWrapper {
 
	double a;
 
 
    static {
        // Ensure native JNI library is loaded
        System.loadLibrary("testjni2");
    }
 
    public JNIWrapper(double a ) {
        System.out.println("JNIWrapper instance created");
		this.a=a;
 
 
 
    }
 
 
		private native JNIWrapper sommeTab();
		public static void main(String args[]) {
			int tabl[] = new int[]{5,15,7,13};
			double a1=10.2;
			int b=10;
 
			JNIWrapper p = new JNIWrapper(a1);
			System.out.println("resultat 1 java: " +p.a );
			p.sommeTab();
 
 
 
			System.out.println("resultat 2 java: "+p.a);
		}
 
 
 
 
}
code C:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
#include "JNIWrapper.h"
#include <stdio.h>
#include <jni.h>
 
JNIEXPORT jobject JNICALL Java_JNIWrapper_sommeTab(JNIEnv *env, jobject obj) {
 
jclass	objjni;
jdouble d;
jfieldID fid;
 
objjni = (*env) -> GetObjectClass(env,obj);
//jmethodID mid = (*env)->GetStaticMethodID(env,objjni, "main", "([Ljava/lang/String;)V");
//(*env)->CallVoidMethod(env,obj, mid);
 
 
fid = (*env) -> GetFieldID(env,objjni,"a","D");
d = (*env) -> GetDoubleField(env,objjni,fid);
 
printf("affichage dans c no1: %lf\n",d);
(*env)->SetDoubleField(env,objjni, fid, d+6);
d = (*env) -> GetDoubleField(env,objjni,fid);
printf("affichage dans c no2: %lf\n",d);
return objjni;
 
}