是否可以通过方法的返回值将数组从Java返回到C ++?

时间:2015-07-16 11:51:17

标签: java c++ arrays java-native-interface return

我知道可以通过本机方法将数组从Java传递到C ++,但在这种情况下,您必须运行Java代码。

我想做的是这样的事情:

public float[] testing2(float[] value1, int[] value2);

有没有办法从C ++代码中解决返回类型float[]?如果不是,最简单的方法是什么,是否可以不用从Java运行代码?

编辑重复:

可能的副本不是重复的,因为我要求使用本机方法的另一种方式来访问此float[] - 但在其他问题中使用本机方法。

1 个答案:

答案 0 :(得分:3)

您可以使用CallObjectMethod()

前提条件:在C ++中假设你有

  • JNIEnv* env;
  • 如您所述,具有Java方法obj的全局或本地引用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