Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1708 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Appeller un objet Java depuis C (ou C++)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Appeller un objet Java depuis C (ou C++)

n°223547
leonhard
Posté le 04-10-2002 à 14:24:31  profilanswer
 

Bonjour
 
Je dois étendre une application qui à jusqu'ici été développée en C et C++. Mon boss demande que les extensions se fassent en Java... Appeller une méthode C depuis Java, j'arrive... Appeller une méthode Java depuis une méthode C qui a été appellée par une méthode Java c'est aussi possible... mais appeller directement un objet java (càd démarrer du même coup la machine virtuelle) depuis une application C, je n'ai pas trouvé.... Alors si quelqu'un à une info...  
 
merci de votre aide

mood
Publicité
Posté le 04-10-2002 à 14:24:31  profilanswer
 

n°223598
BifaceMcLe​OD
The HighGlandeur
Posté le 04-10-2002 à 16:43:19  profilanswer
 

Non, "appeler un objet Java", ça n'a pas de sens. Il faut d'abord lancer la machine virtuelle Java, puis ensuite créer l'objet Java dont tu veux invoquer la (ou les) méthodes.
 
Voici le tutoriel donné par Sun pour démarrer une JVM en C.
 
Voici aussi un exemple typique :

Code :
  1. #include <jni.h>
  2. #ifdef _WIN32
  3. #define PATH_SEPARATOR ';'
  4. #else /* UNIX */
  5. #define PATH_SEPARATOR ':'
  6. #endif
  7. #define USER_CLASSPATH "." /* where Prog.class is */
  8. main() {
  9.     JNIEnv *env;
  10.     JavaVM *jvm;
  11.     JDK1_1InitArgs vm_args;
  12.     jint res;
  13.     jclass cls;
  14.     jmethodID mid;
  15.     jstring jstr;
  16.     jobjectArray args;
  17.     char classpath[1024];
  18.     /* IMPORTANT: specify vm_args version # if you use JDK1.1.2 and beyond */
  19.     vm_args.version = 0x00010001;
  20.     JNI_GetDefaultJavaVMInitArgs(&vm_args);
  21.     /* Append USER_CLASSPATH to the end of default system class path */
  22.     sprintf(classpath, "%s%c%s",
  23.             vm_args.classpath, PATH_SEPARATOR, USER_CLASSPATH);
  24.     vm_args.classpath = classpath;
  25.     /* Create the Java VM */
  26.     res = JNI_CreateJavaVM(&jvm,&env,&vm_args);
  27.     if (res < 0) {
  28.         fprintf(stderr, "Can't create Java VM\n" );
  29.         exit(1);
  30.     }
  31.     cls = (*env)->FindClass(env, "Prog" );
  32.     if (cls == 0) {
  33.         fprintf(stderr, "Can't find Prog class\n" );
  34.         exit(1);
  35.     }
  36.     mid = (*env)->GetStaticMethodID(env, cls, "main", "([Ljava/lang/String;)V" );
  37.     if (mid == 0) {
  38.         fprintf(stderr, "Can't find Prog.main\n" );
  39.         exit(1);
  40.     }
  41.     jstr = (*env)->NewStringUTF(env, " from C!" );
  42.     if (jstr == 0) {
  43.         fprintf(stderr, "Out of memory\n" );
  44.         exit(1);
  45.     }
  46.     args = (*env)->NewObjectArray(env, 1,
  47.                         (*env)->FindClass(env, "java/lang/String" ), jstr);
  48.     if (args == 0) {
  49.         fprintf(stderr, "Out of memory\n" );
  50.         exit(1);
  51.     }
  52.     (*env)->CallStaticVoidMethod(env, cls, mid, args);
  53.     (*jvm)->DestroyJavaVM(jvm);
  54. }


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Appeller un objet Java depuis C (ou C++)

 

Sujets relatifs
Applet Java et navigateursJe cherche un bon compilateur JAVA!
[Java] Je recherche une applet precise...Passage d'objets Java à une application C+++
Le C++ et le Java dans un bateauLinker des librairies C en Java
[JAVA] retrouver le parent?[JAVA] comment donner une taille maximale a un textfield?
Java ou C++base de données java?
Plus de sujets relatifs à : Appeller un objet Java depuis C (ou C++)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR