JavaVM aus c++ heraus aufrufen
-
Hi,
ich hab ein Problem, was mich schon den ganzen Tag beschäftigt und ich mich immer nur im Kreis drehe.
Und zwar möchte ich eine JavaVM aus C++ starten. Mein Code schaut so aus:
(den hab ich mir im Laufe des Tages aus diversen Beispielen zusammengetüftelt - es hab aber leider bei mir kein Beispiel gefunzt)#include "jni.h" #include "stdafx.h" int CreateJavaVM() { JNIEnv *env; JavaVM *jvm; JavaVMInitArgs vm_args; jint res; jclass cls; jmethodID cid, mid; jstring opp_str, opp_str_loc; jobjectArray args; jobject class_instance, return_val; char classpath[4096] = "-Djava.class.path=."; /* IMPORTANT: specify vm_args version # if you use JDK1.1.2 and beyond */ vm_args.version = JNI_VERSION_1_4; JNI_GetDefaultJavaVMInitArgs(&vm_args); JavaVMOption options[1]; options[0].optionString = classpath; vm_args.version = 0x00010004; vm_args.options = options; vm_args.nOptions = 1; vm_args.ignoreUnrecognized = JNI_FALSE; //JNI_TRUE; /* Create the Java VM */ res = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args); return 0; }
Also res gibt halt immer -1 zurück (unbekannter Fehler). Ich hab mal echt überhaupt keinen Plan mehr, wie das gehen soll.
Vielleicht kann mir jmd helfen?
Schonmal THX
Bumbe
-
Hi,
Ich habe mich mit diesem Problem auch vor einigen Wochen auseinander gesetzt.
Es kommt darauf an was du machen willst. Bei einer kleinen Anwendung, kann ich dir raten,wenn du unter Unix arbeitest, den gcj zu benutzen. Der gcj erzeugt aus einer Java-Datei native-Code und keinen Bytecode. Auf der C++-Seite muss die Java-Klasse dann entsprechend in einer Header-Datei abbilden und in deinem C++-Programm inkludieren und einfach benutzen(Objekt der Klassen erzeugen usw.....). Beim Linken solltest allerdings die Option "-lstdc++" mit angeben.
Die Arbeit mit der JNI ist sehr aufwendig.Gruss
Hamm
-
Hi,
erstmal Danke für den Hinweis - aber leider muß das ganze auf MS-BS laufen