[英]How to get Java Enum from C++ JNI?
我正在通过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 ++代码中,enumField始终为null。 我的代码有什么问题? 我的代码在做正确的事情来获取对象内的枚举字段吗? 我应该在ClassFooJava类之外创建枚举吗? 我真的很感谢您的帮助。
我的代码有什么问题?
Java_com_cummins_ctp_ClassFooJava
您正在实现的函数的名称丢失。
我的代码在做正确的事情来获取对象内的枚举字段吗?
您正在传递MyEnum
作为参数。 是j_myEnum
。 也许您想要valueEnum
jfieldID valueEnumField =
env->GetFieldID(cls, "valueEnum", "Lmypackage/ClassFooJava$MyEnum;");
我应该在ClassFooJava类之外创建枚举吗?
随你(由你决定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.