如何获取传递给 JNI 的枚举值

Beb*_*uma 4 java java-native-interface enums

我有一个 Java 应用程序和 JNI (dll)。我想知道如何获取作为参数传递给 JNI 的枚举 (int) 的值。

这是枚举(Java):

public enum envelopeType
{
    NOT_SPECIFIED(-1),
    NONE(0),
    IMAGE(1),
    BITMAP(2);

    private int value;

    private envelopeType(int value)
    {
        this.value = value;
    }   
}
Run Code Online (Sandbox Code Playgroud)

这是 JNI 代码(C++):

JNIEXPORT jint JNICALL Java_Loader_Convert
  (JNIEnv *env, jobject obj, jobject EnvelopeType)
Run Code Online (Sandbox Code Playgroud)

由于枚举作为对象传递,我怎么能得到它的值?

gna*_*117 5

我无法使用@tbodt 提供的解决方案,但他的解决方案足够接近我能够找到解决方案。

查看java 枚举文档,有一种方法ordinal可以将枚举值作为int类型返回。

我使用的代码与@tbodts 解决方案中的代码几乎相同,但是传递给GetMethodID函数的字符串不同。我不需要创建getValue方法并且方法签名()I不是I().

JNIEXPORT jint JNICALL Java_Loader_Convert(JNIEnv *env, jobject obj, jobject EnvelopeType) {
    jmethodID envelopeGetValueMethod = (*env)->GetMethodID(env, (*env)->FindClass(env, "package/of/envelopeType"), "ordinal", "()I");
    jint value = (*env)->CallIntMethod(env, EnvelopeType, envelopeGetValueMethod);
    switch (value) {
        case -1:
        // not specified
        break;
        case 0:
        // none
        break;
        ...
    }
    // rest of native method
}
Run Code Online (Sandbox Code Playgroud)