以下代码在JAVA中声明
private native static Vector< Double > computeSimXML(Vector < String > vDocsPath);
我想将参数vDocsPath(定义为Vector&lt; String&gt;)传递给C ++,JNI生成的代码如下:(我已经实现了一些)
/*
* Class: SimXMLModule
* Method: computeSimXML
* Signature: (Ljava/util/Vector;)Ljava/util/Vector;
*/
JNIEXPORT jobject JNICALL Java_SimXMLModule_computeSimXML
(JNIEnv *, jclass, jobject)
{
vector<double> dist;
dist.push_back(5.0);
dist.push_back(6.0);
}
如何获取vDocsPath
到jobject
的值,并将dist(在JAVA中定义为Vector< Double >
)返回给JAVA?
答案 0 :(得分:5)
这对于从JNI开始来说不是一个好的功能 - 正确实现它将需要一些工作。
Vector<String>
参数是一个普通的非通用Vector
运行时。 Vector<Double>
返回值是普通的非通用Vector
运行时Vector
函数以从参数中获取数据Double
个对象,设置内部double
并调用Vector
方法来设置返回值。我建议您将功能签名更改为:
private native static double[] computeSimXML(String[] vDocsPath);
使用数组的JNI接口比您尝试做的更简单 lot 。您可以使用GetArrayLength
和GetObjectArrayElement
迭代参数,并且可以使用NewDoubleArray
,GetArrayElements
和ReleaseArrayElements