000
10.03.2004, 13:57 Uhr
~tommi
Gast
|
Hi all!
ich versuche mir ein C++ Programm zu schreiben, welches eine JVM erzeugt und mein JavaProgramm ausführt. Das Beispiel, daß ich im Netz gefunden habe funktioniert leider nicht. Meine erste Frage ist: Muss auf dem Rechner das JRE für Java installiert sein? Ich finde nämlich in dem Beispiel keine Zeile wo der Pfad zum JRE gelesen wird? Beim Compilieren liefert der Linker folgenden Fehler:
Invoke.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__JNI_CreateJavaVM@12 Debug/Invoke.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise Fehler beim Ausführen von link.exe.
Im Internet habe ich gefunden, daß ich in diesem Fall eine zusätzliche Library dazulinken muss. Da ich bisher nur Java programmiert habe, stehe ich ehrlich gesagt etwas auf dem Schlauch was Libraries betrifft. Ich habe doch oben mit #include die Headerdateien eingebunden und er findet sie doch auch?
Danke für Eure Hilfe
C++: |
#include <jni.h> #include <stdlib.h>
#define PATH_SEPARATOR ';' #define USER_CLASSPATH "." /* where Prog.class is */
main() { JNIEnv *env; JavaVM *jvm; jint res; jclass cls; jmethodID mid; jstring jstr; jclass stringClass; jobjectArray args;
JavaVMInitArgs vm_args; JavaVMOption options[1]; options[0].optionString = "-Djava.class.path=" USER_CLASSPATH; vm_args.version = 0x00010002; vm_args.options = options; vm_args.nOptions = 1; vm_args.ignoreUnrecognized = JNI_TRUE;
Hier tritt der Fehler auf!!! --> res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (res < 0) { fprintf(stderr, "Can't create Java VM\n"); exit(1); } cls = env->FindClass("Prog"); if (cls == NULL) { goto destroy; }
mid = env->GetStaticMethodID(cls, "main", "([Ljava/lang/StringV");
if (mid == NULL) { goto destroy; } jstr = env->NewStringUTF(" from C!"); if (jstr == NULL) { goto destroy; } stringClass = env->FindClass("java/lang/String"); args = env->NewObjectArray(1, stringClass, jstr); if (args == NULL) { goto destroy; } env->CallStaticVoidMethod(cls, mid, args);
destroy: if (env->ExceptionOccurred()) { env->ExceptionDescribe(); } jvm->DestroyJavaVM(); }
|
|