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

我可以從 C 應用程式呼叫 Java 方法嗎?

Mary-Kate Olsen
發布: 2024-11-13 00:15:02
原創
912 人瀏覽過

Can I call Java methods from a C   application?

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

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