是否可以通过方法的 return 值 return 从 Java 到 C++ 的数组?
Is it possible to return an array from Java to C++ through a return value of a method?
我知道可以通过本机方法将数组从 Java 传递到 C++,但在那种情况下,您必须 运行 Java 代码。
我想做的是这样的:
public float[] testing2(float[] value1, int[] value2);
有没有办法从 C++ 代码中解决 return 类型的 float[]
?如果不是,最简单的方法是什么?是否有可能无需 运行 来自 Java 的代码?
编辑复制:
可能的重复项不是重复项,因为我要求使用本机方法之外的另一种方法来访问此 float[]
- 但在其他问题中使用本机方法。
你可以使用 CallObjectMethod()
.
前提条件:假设在 C++ 中你有
JNIEnv* env;
- 一个全局或局部引用
obj
,它具有您描述的 Java 方法 public float[] testing2(float[] value1, int[] value2)
val1
这是对 Java float[]
的引用
val2
这是对 Java int[]
. 的引用
然后,
jclass clazz = env->GetObjectClass(obj);
jmethodID testing2meth = env->GetMethodID(clazz, "testing2", "([F[I)[F");
jfloatArray ret = (jfloatArray)env->CallObjectMethod(obj, testing2meth, val1, val2);
然后您可以使用GetFloatArrayElements()
或GetFloatArrayRegion()
访问ret
。
我知道可以通过本机方法将数组从 Java 传递到 C++,但在那种情况下,您必须 运行 Java 代码。
我想做的是这样的:
public float[] testing2(float[] value1, int[] value2);
有没有办法从 C++ 代码中解决 return 类型的 float[]
?如果不是,最简单的方法是什么?是否有可能无需 运行 来自 Java 的代码?
编辑复制:
可能的重复项不是重复项,因为我要求使用本机方法之外的另一种方法来访问此 float[]
- 但在其他问题中使用本机方法。
你可以使用 CallObjectMethod()
.
前提条件:假设在 C++ 中你有
JNIEnv* env;
- 一个全局或局部引用
obj
,它具有您描述的 Java 方法public float[] testing2(float[] value1, int[] value2)
val1
这是对 Javafloat[]
的引用
val2
这是对 Javaint[]
. 的引用
然后,
jclass clazz = env->GetObjectClass(obj);
jmethodID testing2meth = env->GetMethodID(clazz, "testing2", "([F[I)[F");
jfloatArray ret = (jfloatArray)env->CallObjectMethod(obj, testing2meth, val1, val2);
然后您可以使用GetFloatArrayElements()
或GetFloatArrayRegion()
访问ret
。