我正在尝试编写带有给定参数的静态Java方法,搜索并调用方法。
该方法应该具有可变数量的参数,并且必须从 C++ 调用。 我尝试了几种选择,但无法完成。这可能吗?
到目前为止,我可以存储它包含的类型和位置,并且我可以将 jobject 和 jstring 放在同一个数组中。
如果这是不可能的,是否可以使用 Java 反射引用从 JNI 找到的 methodID,或者以某种方式传递对 long 对象的引用。这样的结构就可以了,因为我可以将 64 位整数转换为其他所有内容。
最佳答案
如果您在 JNI 中需要该数组,请使用 jvalue union 类型作为数组类型。例如:jvalue myArray* = { (jint) 1, (jlong) 1000, (jboolean) false }
Java 不支持 jvalue 也不支持可变参数函数,因此如果您需要将基元数组从 Java 传递到 JNI 作为解决限制的方法,您应该使用具有基元对象包装器(如 java)的对象数组.lang.Integer 并根据 JNI 中的类型调用值函数。这是可能的,只是实现起来很痛苦。
关于java - 将 JNI 基本类型放入同一数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24457175/