我有一个 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;
}
}
这是 JNI 代码(C++):
JNIEXPORT jint JNICALL Java_Loader_Convert
(JNIEnv *env, jobject obj, jobject EnvelopeType)
由于枚举作为对象传递,我怎样才能获得它的值?
我无法使用@tbodt 提供的解决方案,但他的解决方案足够接近,我能够找到解决方案。
看着java 枚举文档 http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html有方法ordinal
它将返回枚举值int
type.
我使用的代码几乎与 @tbodts 解决方案中列出的代码相同,但是字符串传递到了GetMethodID
功能不同。我不需要创建一个getValue
方法和方法签名是()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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)