我正在创建一个C ++库,我想将它移植到java。我有一个通过调用RAWINPUTDEVICELIST
来获取GetRawInputDeviceList()
的方法,并滚动数组并将每个项目转换为名为Device
的类的实例,并将它们添加到数组中,在C ++中。我想调用此方法并将列表的内容转换为java类的数组,称为Device
,并将它包含的变量分配给C ++类的值。
编辑:假设我要转换的数组包含C ++类的实例,如下所示:
class CplusplusExampleClass {
public:
int variable;
};
我想将C ++数组中包含的该类的所有实例转换为java类的相应实例。假装java类看起来像这样:
public class JavaExampleClass {
public int variable;
}
这可以用@Gergely建议的问题的答案中描述的方法,只是转换整数然后为每个类创建一个新实例,但假装这些类包含很多东西,比如对象(类实例),其他变量等。
这可能,然后,我该怎么做?
答案 0 :(得分:1)
这不是你想要的吗? How to return an array from JNI to Java?
以下是一些更详细的示例:https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html#zz-6.2
如果要从JNI代码创建Java对象,那就特别痛苦了。像这样:
jclass cls = (*env)->FindClass(env, "...your class...");
jmethodID ctor = (*env)->GetMethodID(env, cls, "<init>", "...your ctor signature...");
jobject obj = (*env)->NewObject(env, cls, ctor, ...);
另外,你应该对所有这些的返回值进行空值检查。
之后,您可以创建Java数组并将项目添加到其中:
jobjectArray results = (*env)->NewObjectArray(env, 100, cls, NULL);
(*env)->SetObjectArrayElement(env, results, 0, obj);