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)
由于枚举作为对象传递,我怎么能得到它的值?
我无法使用@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)
| 归档时间: |
|
| 查看次数: |
9584 次 |
| 最近记录: |