在我的 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/