Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Jvm mit C++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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();
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.03.2004, 14:52 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


JNI hab ich noch nicht benutzt aber wie du schon richtig bemerkt hast musst du dem linker noch was übergeben (vermutlich ein jni.lib oder jni.cpp). Dein Quellcode ist zumindest syntaktisch ok sonst hätte der compiler schon vorher gemeckert...
hinzufügen kannst du eine *.lib in visual studio zum beispiele unter projekt->settings und da auf den reiter link klicken. dort kannst du dann die von dir gewünschten *.libs mit angeben um den linker zu beschwichtigen...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 10.03.2004 um 14:52 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: