如何從C 應用程式呼叫Java 方法
問題:
問題:可以從電話呼叫> Java 程式碼中定義的函數應用程式?
答案:是的,可以從 C 程式碼呼叫 Java 方法,但過程有點複雜。這種方法利用反射並以非類型安全的方式操作。
實作:#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; }C 程式碼建立 Java 虛擬機器 (JVM) 的實例在C程式碼中。如果從 Java 呼叫本機程式碼,則無需建立 VM 實例。
以下是如何從C 訪問Java 方法的示例:
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
編譯:
注意:處理錯誤至關重要JNI 方法中的程式碼來實現正確的錯誤管理。以上是我可以從 C 應用程式呼叫 Java 方法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!