Heim > Backend-Entwicklung > C++ > Hauptteil

Wie können Java-Methoden aus C-Anwendungen aufgerufen werden?

Susan Sarandon
Freigeben: 2024-11-09 17:35:02
Original
798 Leute haben es durchsucht

How can Java methods be invoked from C   applications?

Aufrufen von Java-Methoden aus C-Anwendungen

Im Bereich der plattformübergreifenden Integration wird die Fähigkeit zur nahtlosen Interaktion zwischen verschiedenen Programmiersprachen von größter Bedeutung . Ein solches Szenario beinhaltet den Aufruf von Java-Funktionen aus C-Anwendungen heraus.

Dieses Kunststück ist zwar nicht einfach, aber durch einen reflektierten Ansatz durchaus erreichbar. Durch die Nutzung von Javas Native Interface (JNI) kann C mit der Java Virtual Machine (JVM) interagieren. Hier ist eine detaillierte Erklärung des Prozesses:

  1. Erstellen Sie eine Java Virtual Machine (JVM):

    • Initialisieren Sie die JNI, indem Sie eine erstellen JavaVM-Objekt und entsprechende JNIEnv*-Umgebung.
    • Geben Sie die gewünschte JNI-Version und -Optionen über JavaVMInitArgs an.
  2. Erhalten Sie das Java-Objekt:

    • Konvertieren Sie das erforderliche Java-Objekt mit NewStringUTF in einen C-JString.
  3. Suchen Sie die Java-Methode:

    • Finden Sie mit FindClass die Klasse, die die Zielmethode enthält.
    • Identifizieren Sie die Methode anhand des Namens und der Signatur mit GetMethodID.
  4. Rufen Sie die Java-Methode auf:

    • Rufen Sie die Java-Methode für das Objekt mit CallObjectMethod auf.
    • Rufen Sie das Ergebnis als Jobprojekt ab und wandeln Sie es in den entsprechenden Typ um.
  5. Ergebnis extrahieren:

    • Konvertieren Sie das Jstring-Ergebnis mit GetStringUTFChars in einen String im C-Stil.
  6. Aufräumen:

    • JNI-Ressourcen mit ReleaseStringUTFChars freigeben.
    • JVM mit DestroyJavaVM zerstören.

Beispielcode:

#include <jni.h>
#include <stdio.h>

int main() {
    JavaVM *vm;
    JNIEnv *env;
    JavaVMInitArgs vm_args;
    vm_args.version = JNI_VERSION_1_2;
    vm_args.nOptions = 0;
    vm_args.ignoreUnrecognized = 1;

    // Construct a VM
    jint res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);

    // Construct a String
    jstring jstr = env->NewStringUTF("Hello World");

    // Find the class and method
    jclass clazz = env->FindClass("java/lang/String");
    jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase", "()Ljava/lang/String;");

    // Call the method
    jobject result = env->CallObjectMethod(jstr, to_lower);

    // Get the C-style string
    const char *str = env->GetStringUTFChars((jstring)result, NULL);

    printf("%s\n", str);

    // Clean up
    env->ReleaseStringUTFChars(jstr, str);
    vm->DestroyJavaVM();
    return 0;
}
Nach dem Login kopieren

Um den Code unter Linux zu kompilieren, führen Sie Folgendes aus:

g++ -I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux -L/usr/lib/jvm/java-6-sun/jre/lib/i386/server/ -ljvm jnitest.cc
Nach dem Login kopieren

Hinweis: Implementieren Sie eine ordnungsgemäße Fehlerbehandlung durch Überprüfung die Rückkehrcodes von JNI-Methoden.

Das obige ist der detaillierte Inhalt vonWie können Java-Methoden aus C-Anwendungen aufgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage