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:
Erstellen Sie eine Java Virtual Machine (JVM):
Erhalten Sie das Java-Objekt:
Suchen Sie die Java-Methode:
Rufen Sie die Java-Methode auf:
Ergebnis extrahieren:
Aufräumen:
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; }
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
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!