Я создаю простую C++-оболочку через Java JNI для доступа к моему Java-коду. Мой вопрос в том, что я перечисляю в своем Java-коде, что мне нужно получить значение из моего кода JNI на C++. Каков наилучший способ сделать это?Как получить Java Enum из 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 всегда нуль. Что не так с моим кодом? Является ли мой код правильным, чтобы получить поле перечисления внутри объекта? Должен ли я создать перечисление вне класса ClassFooJava? Я действительно ценю любую помощь.
'MyEnum' - тип перечисления, а не поле. Поле было бы, если бы у вас было что-то вроде 'private MyEnum myEnum;' – Michael