Bonjour a tous,
J'ai mon fichier JAVA possedant une methode native en C/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
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");
  }
}
j'ai deja creer les .class, les .h .lib etc...

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:

Exception in thread "main" java.lang.UnsatisfiedLinkError: accessFields
at fieldAccess.FieldAccess.accessFields(Native Method)
at fieldAccess.FieldAccess.main(FieldAccess.java:11)
Pourriez vous m'aider SVP pour que je puisse faire compiler avec Eclipse.

Je suis un debutant pour l'utilisation d'Eclipse mais dans ma compagnie prefere d'Utiliser Eclipse

Merci.

Serge