gpt4 book ai didi

java - 如何调用从 JNI 返回数组的 C++ 方法并将数组的内容转换为 java 类数组?

转载 作者:行者123 更新时间:2023-11-30 05:48:25 25 4
gpt4 key购买 nike

我正在创建一个 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 建议的问题的答案中描述的方法有关,只需转换整数,然后为每个类创建一个新实例,但假装这些类包含很多东西,比如对象(类实例)、其他变量等。

这是否可能,然后,我该怎么做?

最佳答案

这不是你想要的吗? 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);

关于java - 如何调用从 JNI 返回数组的 C++ 方法并将数组的内容转换为 java 类数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28197227/

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