Cara Memanggil Kaedah Java daripada Aplikasi C
Masalah:
Adalah mungkin untuk gunakan fungsi yang ditakrifkan dalam kod Java daripada C aplikasi?
Jawapan:
Ya, adalah mungkin untuk memanggil kaedah Java daripada kod C, tetapi prosesnya agak rumit. Pendekatan ini menggunakan refleksi dan beroperasi dalam cara yang tidak selamat jenis.
Pelaksanaan:
Kod C mencipta contoh Mesin Maya Java (JVM) daripada dalam kod C. Jika kod asli digunakan daripada Java, mencipta tika VM adalah tidak diperlukan.
Berikut ialah contoh cara untuk mengakses kaedah Java daripada 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; }
Kompilasi:
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: Adalah penting untuk menangani ralat kod daripada kaedah JNI untuk melaksanakan pengurusan ralat yang betul.
Atas ialah kandungan terperinci Bolehkah saya memanggil kaedah Java daripada aplikasi C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!