java - 如何在 jni 输入参数中返回 double[]

标签 java c++ arrays java-native-interface arguments

在我的 Java 代码中,我定义了以下函数签名:

public native boolean getData( double [] data );

在我的 C++ 代码中,我想填充 double 组数据以返回到 Java,函数返回的 boolean 值将指示数据设置是否正确。

javah 创建了以下 C++ 函数签名:

JNIEXPORT jboolean JNICALL Java_com_test_getData___3D( JNIEnv* pEnv, jclass cls, jdoubleArray dArray ) 

如何在 C++ 中实现此函数,以便我可以返回在 C++ 代码中生成的 3 个 double 值?

我想做类似于这篇文章的事情:http://www.javaworld.com/article/2077554/learn-java/java-tip-54--returning-data-in-reference-arguments-via-jni.html我不想使用 StringBuffer,而是想用值填充 double 组。

最佳答案

它应该如下所示:

JNIEXPORT jboolean JNICALL Java_com_test_getData___3D( JNIEnv* pEnv, jclass cls, jdoubleArray dArray )
{
    jboolean isCopy1;
    jdouble* srcArrayElems = 
           pEnv->GetDoubleArrayElements(dArray, &isCopy1);
    jint n = pEnv->GetArrayLength(dArray);
    jboolean res = false;

    // here update srcArrayElems values, maybe set res to true

    if (isCopy1 == JNI_TRUE) {
       pEnv->ReleaseDoubleArrayElements(dArray, srcArrayElems, JNI_ABORT);
    }
    return res ;
}

调用 getdata 时,您的数组必须已经分配 - 这意味着长度正确。

我没有编译这段代码,你可以在谷歌上找到很多示例,这里有一些很好的链接:

http://www.ict.nsc.ru/win/docs/java/tutorial/native1.1/implementing/array.html http://statweb.stanford.edu/~naras/java/course/lec5/lec5.html

关于java - 如何在 jni 输入参数中返回 double[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30536480/

相关文章:

java - 如何检测哪个 fragment 处于 Activity 状态?

java - 在 ImageView 上设置layout_marginTop?

java - 如何应用在 fragment 中按下后退按钮

java - 使用数组的二叉树

java - XmlJavaTypeAdapter XmlElement 不适用于多个字段

c++ - 在 C++ 中定义数组并在结构中使用它

c++ - 创建/改进 makefile

c++ - 如何获取kernel32.dll!BaseThreadStartThunk的内存地址?

c++ - 为什么在使用 mmap() 处理 JPG 文件时会出现内存错误?

javascript - 将数组插入数组的数组中 Javascript