Memanfaatkan Kaedah Java daripada Aplikasi C
Dalam bidang integrasi merentas platform, keupayaan untuk berinteraksi dengan lancar antara bahasa pengaturcaraan yang berbeza menjadi yang terpenting . Satu senario sedemikian melibatkan panggilan fungsi Java dari dalam aplikasi C.
Walaupun tidak mudah, pencapaian ini sememangnya boleh dicapai melalui pendekatan reflektif. Dengan memanfaatkan Antara Muka Asli Java (JNI), C boleh berinteraksi dengan Mesin Maya Java (JVM). Berikut ialah penjelasan terperinci tentang proses tersebut:
Buat Mesin Maya Java (JVM):
Dapatkan Objek Java:
Cari Kaedah Java:
Panggil Kaedah Java:
Ekstrak Hasil:
Bersihkan:
Contoh Kod:
#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; }
Untuk menyusun kod pada Linux, jalankan:
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
Nota: Laksanakan pengendalian ralat yang betul dengan menyemak kod pemulangan kaedah JNI.
Atas ialah kandungan terperinci Bagaimanakah kaedah Java boleh digunakan daripada aplikasi C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!