将JNI原始类型放入相同的数组中

时间:2014-06-27 17:00:53

标签: java android object casting java-native-interface

我正在尝试使用给定参数编写静态Java方法,搜索并调用Method。

此方法应该具有可变数量的参数,并且必须从C ++调用。 我尝试了几个选项,但我无法完成它。这甚至可能吗?

到目前为止,我可以存储它包含的类型和位置,我可以将jobject和jstring放在同一个数组中。

如果无法做到这一点,是否可以使用Java的反射来引用从JNI找到的methodID,或者以某种方式将引用传递给对象。这样的结构没问题,因为我可以将64位整数转换为其他所有内容。

1 个答案:

答案 0 :(得分:1)

如果在JNI中需要该数组,请使用jvalue union类型作为数组类型。例如:jvalue myArray * = {(jint)1,(jlong​​)1000,(jboolean)false}

Java不支持jvalue,也不支持可变参数函数,所以如果你需要将这些原语数组从Java传递给JNI作为解决限制的方法,你应该使用带有原始对象包装器的Object数组,比如java .lang.Integer并根据JNI中的类型调用值函数。它可能,只是一种实施的痛苦。