如何從本機程式碼呼叫 Java 方法

Java Native Interface(JNI) 允許你從本機程式碼呼叫 Java 函式。這是一個如何做到的簡單示例:

Java 程式碼:

package com.example.jniexample;
public class JNITest {
    public static int getAnswer(bool) {
        return 42;
    }
}

原生程式碼:

int getTheAnswer()
{
    // Get JNI environment
    JNIEnv *env = JniGetEnv();

    // Find the Java class - provide package ('.' replaced to '/') and class name
    jclass jniTestClass = env->FindClass("com/example/jniexample/JNITest");

    // Find the Java method - provide parameters inside () and return value (see table below for an explanation of how to encode them) 
    jmethodID getAnswerMethod = env->GetStaticMethodID(jniTestClass, "getAnswer", "(Z)I;");

    // Calling the method
    return (int)env->CallStaticObjectMethod(jniTestClass, getAnswerMethod, (jboolean)true);
}

Java 型別的 JNI 方法簽名:

JNI 簽名 Java 型別
Z 布林
B 位元組
C char
S short
I int
J long
F float
D double
L fully-qualified-class ; 完全限定類
[type type[]

因此,對於我們的示例,我們使用(Z)I - 這意味著函式獲取布林值並返回 int。