Bonjour a tous,
J'ai mon fichier JAVA possedant une methode native en C/C++,
j'ai deja creer les .class, les .h .lib etc...
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 package fieldAccess; public class FieldAccess { static int si; String s; private native void accessFields(); public static void main(String args[]) { FieldAccess c = new FieldAccess(); FieldAccess.si = 100; c.s = "abc"; c.accessFields(); System.out.println("In Java:"); System.out.println(" FieldAccess.si = " + FieldAccess.si); System.out.println(" c.s = \"" + c.s + "\""); } static { System.loadLibrary("FieldAccesslib"); } }
Mon fichier native est:
Code C++ : 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 #include <stdio.h> #include <jni.h> #include "FieldAccess.h" JNIEXPORT void JNICALL Java_FieldAccess_accessFields(JNIEnv *env, jobject obj) { jclass cls = (*env)->GetObjectClass(env, obj); jfieldID fid; jstring jstr; const char *str; jint si; printf("In C:\n"); fid = (*env)->GetStaticFieldID(env, cls, "si", "I"); if (fid == 0) { return; } si = (*env)->GetStaticIntField(env, cls, fid); printf(" FieldAccess.si = %d\n", si); (*env)->SetStaticIntField(env, cls, fid, 200); fid = (*env)->GetFieldID(env, cls, "s", "Ljava/lang/String;"); if (fid == 0) { return; } jstr = (*env)->GetObjectField(env, obj, fid); str = (*env)->GetStringUTFChars(env, jstr, 0); printf(" c.s = \"%s\"\n", str); (*env)->ReleaseStringUTFChars(env, jstr, str); jstr = (*env)->NewStringUTF(env, "123"); (*env)->SetObjectField(env, obj, fid, jstr); }
J'ai pu creer mon .dll avec avec la comamnde shell.
A la fin en faisant la commande shell java FieldAccess
Ca marche tres bien.
Mais j'aimerai compiler avec ECLISPE, mais ca ne marche pas:
Le message d'erreur est:
Pourriez vous m'aider SVP pour que je puisse faire compiler avec Eclipse.Exception in thread "main" java.lang.UnsatisfiedLinkError: accessFields
at fieldAccess.FieldAccess.accessFields(Native Method)
at fieldAccess.FieldAccess.main(FieldAccess.java:11)
Je suis un debutant pour l'utilisation d'Eclipse mais dans ma compagnie prefere d'Utiliser Eclipse
Merci.
Serge
Partager