Hallo,
ich möchte aus einem C++ Programm eine Java Methode aufrufen. Dazu muss ich im C+±Teil eine JVM erzeugen mit JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
Doch vorher müssen noch bestimmte Parameter gesetzt werden. Ich habe diese nur für das JDK1.2, ich nutze aber SDK 1.4
Mein Code:
JavaVMInitArgs vm_args;
JavaVMOption options[4];
options[0].optionString = „-Djava.compiler=NONE“;
options[1].optionString = „-Djava.class.path=c:\myclasses“;
/* PROBLEM 1: Obwohl in der Vorlage c:\ steht, muss ich c:/ schreiben, denn bei „“ meckert er immerzu!
Außerdem: welcher Ordner muss hier genau stehen? Der, in dem die Klasse liegt, die ich später mal aufrufen werde, wenn die VM läuft?*/
options[2].optionString = „-Djava.library.path=c:\mylibs“;
/* PROBLEM 2: Was soll hier hin? In der Beschreibung stand native library path, aber ich bin ja im netive teil, da ich das ganze von C++ aus aufrufe! Wo ist denn der library path von C++?*/
options[3].optionString = „-verbose:jni“;
vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 4;
vm_args.ignoreUnrecognized = JNI_TRUE;
res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);
if (res
/* PROBLEM 1: Obwohl in der Vorlage c:\ steht, muss ich c:/
schreiben, denn bei „“ meckert er immerzu!
Du musst in C++ Code den \ escapen durch einen zweiten, also „c:\myclasses“ o.ä.
Außerdem: welcher Ordner muss hier genau stehen? Der, in dem
die Klasse liegt, die ich später mal aufrufen werde, wenn die
VM läuft?*/
Ja, wenn du Packages benutzt, müssen dann da drunter die Verzeichnisse für deine Klassen liegen, wenn nicht, dann direkt dort drin.
options[2].optionString = „-Djava.library.path=c:\mylibs“;
/* PROBLEM 2: Was soll hier hin? In der Beschreibung stand
native library path, aber ich bin ja im netive teil, da ich
das ganze von C++ aus aufrufe! Wo ist denn der library path
von C++?*/
Das ist der Pfad von dem Java native libraries lädt (also quasi der andere Weg, Java->JNI->.dll), dürfte für dich relativ egal sein
Ich kriege keine Fehler beim Compilen und Linken, nur als
Ausgabe im Programm: Die JVM konnte nicht erstellt werden!
Was ist denn der Rückgabewert den du von JNI_CreateJavaVM kriegst? Folgende Möglichkeiten gibts:
#define JNI_OK 0 /* success */
#define JNI_ERR (-1) /* unknown error */
#define JNI_EDETACHED (-2) /* thread detached from the VM */
#define JNI_EVERSION (-3) /* JNI version error */
#define JNI_ENOMEM (-4) /* not enough memory */
#define JNI_EEXIST (-5) /* VM already created */
#define JNI_EINVAL (-6) /* invalid arguments */
Grüße
Bruno
Was ist denn der Rückgabewert den du von JNI_CreateJavaVM
kriegst? Folgende Möglichkeiten gibts:
#define JNI_OK 0 /* success */
#define JNI_ERR (-1) /* unknown error */
#define JNI_EDETACHED (-2) /* thread detached from the VM */
#define JNI_EVERSION (-3) /* JNI version error */
#define JNI_ENOMEM (-4) /* not enough memory */
#define JNI_EEXIST (-5) /* VM already created */
#define JNI_EINVAL (-6) /* invalid arguments */
Ich bekomme -1 als Rückgabewert …