首頁 > 後端開發 > C++ > 主體

如何從 C 應用程式呼叫 Java 方法?

Susan Sarandon
發布: 2024-11-09 17:35:02
原創
791 人瀏覽過

How can Java methods be invoked from C   applications?

從C 應用程式呼叫Java 方法

在跨平台整合領域,不同程式語言之間無縫互動的能力變得至關重要。其中一個場景涉及從 C 應用程式內呼叫 Java 函數。

雖然並不簡單,但這項壯舉確實可以透過反射方法實現。透過利用 Java 的本機介面 (JNI),C 可以與 Java 虛擬機器 (JVM) 進行互動。以下是流程的詳細說明:

  1. 建立Java 虛擬機器(JVM):

    • 透過建立一個來初始化JNI JavaVM物件和對應的JNIEnv* 環境。
    • 透過 JavaVMInitArgs 指定所需的 JNI 版本和選項。
  2. 取得 Java 物件:

    • 使用 NewStringUTF 將所需的 Java 物件轉換為 C jstring。
  3. 找到 Java 方法:

    • 使用 FindClass 找出包含目標方法的類別。
    • 使用 GetMethodID 透過名稱和簽章辨識方法。
  4. 呼叫 Java 方法:

    • 使用 CallObjectMethod 呼叫物件上的 Java 方法。
    • 以 jobject 形式檢索結果並將其轉換為適當的類型。
  5. 擷取結果:

    • 使用 GetStringUTFChars 將 jstring 結果轉換為 C 樣式字串。
  6. 清理:

    • 使用 ReleaseStringUTFChars 釋放 JNI 資源。
    • 使用 DestroyJavaVM 銷毀 JVM。

範例程式碼:

#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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板