Heim  >  Artikel  >  Backend-Entwicklung  >  Kann ich Java-Methoden aus einer C-Anwendung aufrufen?

Kann ich Java-Methoden aus einer C-Anwendung aufrufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-13 00:15:02914Durchsuche

Can I call Java methods from a C   application?

So rufen Sie Java-Methoden aus C-Anwendungen auf

Problem:

Es ist möglich In Java-Code definierte Funktionen aus einer C-Anwendung aufrufen?

Antwort:

Ja, es ist möglich, Java-Methoden aus C-Code aufzurufen, aber der Prozess ist etwas komplex . Dieser Ansatz nutzt Reflektion und arbeitet nicht typsicher.

Implementierung:

Der C-Code erstellt eine Instanz der Java Virtual Machine (JVM). innerhalb des C-Codes. Wenn der native Code aus Java aufgerufen wird, ist das Erstellen einer VM-Instanz nicht erforderlich.

Hier ist ein Beispiel für den Zugriff auf eine Java-Methode aus C:

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

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

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

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

    // Get the class containing the method to be invoked
    jclass clazz = env->FindClass("java/lang/String");

    // Get the method to be called
    jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase", "()Ljava/lang/String;");

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

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

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

    // Clean up
    env->ReleaseStringUTFChars(jstr, str);

    // Destroy the JVM
    vm->DestroyJavaVM();

    return 0;
}

Kompilierung:

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

Hinweis: Es ist wichtig, Fehlercodes aus den JNI-Methoden zu verarbeiten, um ein ordnungsgemäßes Fehlermanagement zu implementieren.

Das obige ist der detaillierte Inhalt vonKann ich Java-Methoden aus einer C-Anwendung aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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