java - 将 JNI 基本类型放入同一数组中

标签 java android object casting java-native-interface

我正在尝试编写带有给定参数的静态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/

相关文章:

java - 用 JUnit 比较两个对象显示奇怪的行为

java - 名称当前版本的 google drive API v3

java - 如何使用 spring-data-jdbc 插入不可变记录

javascript - 电话 : href "Click to call" link not working in Android

arrays - 比较两个对象列表A和B的列表,并存储在 Dart 中的另一个列表C中

build - 构建 openjdk 时未找到 C 编译器

android - 以私有(private)模式录制视频和存储

android - 将 SQLite Cursor 的结果转换为我的对象

Java拼接各种方法(不是拼接字符串的方法)

javascript - 按屏幕参数排序的文件