如何解决在JNI中将数组从Java来回传递给C
我正在研究一个涉及JNI的Android Studio项目,以在用Java创建的数组上运行一些信号处理功能。我需要能够从Java向C提供一个double数组,运行过滤器,并将Java发送回该数组。过滤功能在Android环境中通过CMake可以正常工作。进行测试,我可以毫无问题地从C到Java获得double类型的数组。我有一个将数组从Java发送到C的函数。我的问题是,我不太确定如何将该数组传递给过滤函数以将其发送回Java。
方法,即Java中的公共静态本机double addArray(double [] arr),在我的algorithm.c文件中进行了相应编码:
jdouble JNICALL
Java_com_example_covid19_MainActivity_addArray(JNIEnv *env,jclass clazz,jdoubleArray jarr) {
static double dv[2890080];
static double y_fil[2890080];
jdouble *arr = (*env)->GetDoubleArrayElements(env,jarr,NULL);
double res=0;
int size = (*env)->GetArrayLength(env,jarr);
for(int i=0;i<size;i++)
dv[i] = arr[i];
(*env)->ReleaseDoubleArrayElements(env,arr,0);
filtering(dv,y_fil);
return res;
}
在上面的函数中,当我调用filter(dv,y_fil)时,如果我能够将dv数组发送回Java,那我会很高兴。但是将数组发送回Java需要一个单独的JNICALL。我从这里感到困惑,尽管我在网上看到了很多处理从C到Java的数据的例子,但我还没有看到涉及首先从Java获取数据的例子。任何见识将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。