從C 應用程式呼叫Java 方法
在跨平台整合領域,不同程式語言之間無縫互動的能力變得至關重要。其中一個場景涉及從 C 應用程式內呼叫 Java 函數。
雖然並不簡單,但這項壯舉確實可以透過反射方法實現。透過利用 Java 的本機介面 (JNI),C 可以與 Java 虛擬機器 (JVM) 進行互動。以下是流程的詳細說明:
建立Java 虛擬機器(JVM):
取得 Java 物件:
找到 Java 方法:
呼叫 Java 方法:
擷取結果:
清理:
範例程式碼:
#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; }
要在Linux 上編譯程式碼,請執行:
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中文網其他相關文章!