How to get the value of an enum being passed to the JNI
enums, java, java-native-interface
Solution
I was not able to use the solution provided by @tbodt but his was close enough that I was able to find the solution.
Looking at the java enum documentaiton there is the method `ordinal` that will return the enum value as an `int` type.
The code I used was almost identical to that lised in @tbodts solution however the strings passed into the `GetMethodID` function are different. I don't need to create a `getValue` method and the method signature is `()I` not `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
}
Problem
I have a Java application and JNI (dll). I want to know how to get the value of the enum (int) that is being passed as a parameter to the JNI. Here's the enum (Java): ``` public enum envelopeType { NOT_SPECIFIED(-1), NONE(0), IMAGE(1), BITMAP(2); private int value; private envelopeType(int value) { this.value = value; } } ``` Here's the JNI code (C++): ``` JNIEXPORT jint JNICALL Java_Loader_Convert (JNIEnv *env, jobject obj, jobject EnvelopeType) ``` since the enum is being passed as an object, how could I get the value of that?