gpt4 book ai didi

java - 从 Java 到 C++ 的 JNI 转换

转载 作者:行者123 更新时间:2023-11-28 05:11:27 24 4
gpt4 key购买 nike

我的 C++ 函数参数的类型是 std::vector<float>&那么从 JAVA 传递参数的最佳方式是什么?作为 vector 使数组动态但我传递的值是静态的。如果我是 Java 新手,如果我问错了问题,我深表歉意。

实际上,我正在传递具有 float 数组的图像数据Java 端的值。

我试过以下:

JNIEXPORT void JNICALL foo(JNIEnv* env, Jclass clazz, JfloatArray input){
jfloat* img = env->GetFloatArrayElements(input,NULL)

...
}

但它给出了以下错误:

error: could not convert 'img' from 'jfloat* {aka float*}' to 'std::vector<float>&'

最佳答案

您只需将数据复制到一个新的 vector 中——这就是 vector 的工作方式;它提供了改变长度的能力。

JNIEXPORT void JNICALL Java_Main_foo(JNIEnv *env, jclass clazz, jfloatArray input)
{
float* array = env->GetFloatArrayElements(input, NULL);
jsize len = env->GetArrayLength(input);
std::vector<float> img (array, array+len );
// assuming foo will not alter img
env->ReleaseFloatArrayElements(input, array, JNI_ABORT);
foo(img);
}

注意:您的 native 函数签名看起来有点可疑。它们通常是在已编译的 Java 类上使用 javah 实用程序生成的。这样 JVM 将能够通过加载的共享库(动态链接库)中的 namespace 、类和方法名称找到它。

关于java - 从 Java 到 C++ 的 JNI 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43429223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com