Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » eine Java-Funktion aus einem C++-Programm aufrufen

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
21.09.2004, 11:43 Uhr
~Hammoud
Gast


Hi,

Ich habe vor eine Funktion, die in einer Java-Klasse implementiert ist, aus einem C++-Programm aufzurufen. Ich suche eine Möglichkeit, die mir erlaubt die entsprechende Java-Funktion in meiner C++-Klasse so zu deklarieren, dass diese auch von Objekten der Klasse aufgerufen werden können.
(Der Umgekehrte Fall ist relativ einfach, da man die entsprechenden C-Funktionen in den Java-Klassen als native deklarieren braucht.)


PS: Wir arbeiten nicht mit Java Native Interface



Vielen Dank im Voraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.09.2004, 11:54 Uhr
virtual
Sexiest Bit alive
(Operator)


Das schlüsselwort lautet JNI, einen anderen Weg gibt es nicht.

Das kann man nicht in fünf Sätzen erklären, aber das sollte ein guter Einstieg in die Materie beiten: http://java.sun.com/j2se/1.3/docs/guide/jni/spec/jniTOC.doc.html

Ein kleines Beispiel:

Code:
public class Hello
{
    public static void main(String[] args)
    {
        System.out.println("Hallo JRockit: "+args[0]);
    }
}


Sei eine kleine Java Klasse. Um die main Method aufzurufen, mußt du eine JVM iniitialisieren und dann die Klasse sowie die Methode finden und Aufrufen:

C++:
#include "jni.h"
#include <stdio.h>
#include <stdlib.h>

void jnicall()
{
        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=.";
    vm_args.version = 0x00010002;
    vm_args.options = options;
    vm_args.nOptions = 1;
    vm_args.ignoreUnrecognized = JNI_TRUE;
     res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

     if (res < 0) {
         fprintf(stderr, "Can't create Java VM\n");
         exit(1);
     }
     cls = env->FindClass("Hello");
     if (cls == NULL) {
         goto destroy;
     }

     mid = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");
     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();
}


int main()
{
        jnicall();
}



Der erforderliche Header jni.h sollte bei dem JDK dabei liegen.
Aber insges:
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.09.2004, 12:36 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Wie wärs mit CORBA? Bißchen funktionaler Overkill, aber schön einfach
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.10.2004, 16:32 Uhr
~Bumbe
Gast


Hi.

Ich bin gerade auf diesen Thread gestoßen, da ich mich auch schon den ganzen Tag mit der Initialisierung der VM rumschlage. Irgendwie funzt aber auch das Beispiel bei mir nicht.

Sprich: res ist immer -1 -> unbekannter Fehler

Woran könnte das liegen?
Gruss & THX
Bumbe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


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: