gpt4 book ai didi

java - 如何从 C++ JNI 获取 Java 枚举?

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:12 27 4
gpt4 key购买 nike

我正在通过 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 始终为空。我的代码有什么问题?我的代码是否正确地获取了对象中的枚举字段?我应该在我的 ClassFooJava 类之外创建枚举吗?我非常感谢任何帮助。

最佳答案

What is wrong with my code?

Java_com_cummins_ctp_ClassFooJava

您正在实现的函数的名称丢失。

Is my code doing the right thing to get the enumeration field within the object?

您正在将 MyEnum 作为参数传递。它是 j_myEnum。也许您想要 valueEnum

jfieldID valueEnumField = 
env->GetFieldID(cls, "valueEnum", "Lmypackage/ClassFooJava$MyEnum;");

Should I create the enumeration outside my ClassFooJava class?

这取决于你。

关于java - 如何从 C++ JNI 获取 Java 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33613823/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com