如何从C++ JNI中获取java枚举?
我通过java JNI创建一个简单的C++包装器来访问java代码。我的问题是,我在java代码中枚举了我需要从我的C++ JNI代码中获取值。最好的方法是什么以下是我的Java代码快照:
package mypackage;
public class ClassFooJava
{
public enum MyEnum
{
Enabled (0),
DoNothing (1),
Disable (2)
;
public int getValue()
{
return valueEnum;
}
private final int valueEnum;
private MyEnum(int valueEnum)
{
this.valueEnum = valueEnum;
}
}
static
{
try
{
System.load("MyCPlusPlus.dll");
}
catch(Exception e)
{
System.err.println("Caught exception: " + e.toString());
}
}
public native long GetInstance();
public native void FreeInstance(long LearningAccess);
public native int FooFunctionJava(MyEnum myEnum);
}
这是我的C++代码的快照:
JNIEXPORT jint JNICALL Java_com_cummins_ctp_ClassFooJava
(JNIEnv * env, jobject obj,
jobject j_myEnum)
{
jclass cls = env->GetObjectClass(obj);
jfieldID myEnumField = env->GetFieldID(cls, "MyEnum", "Lmypackage.ClassFooJava;");
if (myEnumField == NULL)
{
// IT ALWAYS NULL
cout << "NULL NULL NULL" << endl;
return 0;
}
}
<注意,在我的C++代码中,枚举字段总是空的。
我的代码怎么了?我的代码在对象中获取枚举字段是否正确?我应该在ClassFooJava类之外创建枚举吗?
我真的非常感谢你的帮助
# 1 楼答案
缺少要实现的函数的名称
您正在将
MyEnum
作为参数传递。它是j_myEnum
。也许你想要valueEnum
这取决于你