2011-04-16 175 views
1

实现DLL文件之间的参数下面的代码是在JAVA声明如何通过JNI,并通过C++

private native static Vector<Double> computeSimXML(Vector <String> vDocsPath); 

我想通过参数vDocsPath(定义为向量<字符串>)为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); 

} 

我如何通过jobject得到vDocsPath值,并返回DIST(在Java中定义为Vector<Double>)以JAVA?

回答

5

这不是一个好的JNI开始函数 - 正确实现它需要一些工作。

  • Vector<String>参数是一个普通的非通用Vector运行时。
  • Vector<Double>返回值是一个普通的非通用Vector运行
  • 您需要检索类和方法ID,并调用Vector函数来获取数据了参数
  • 你需要构建一系列Double对象的,设置内部double并调用Vector方法来设置返回值。

我建议你改变函数签名:

private native static double[] computeSimXML(String[] vDocsPath); 

JNI接口的使用数组是很多比你想做什么简单。您可以使用GetArrayLengthGetObjectArrayElement迭代参数,并且您可以使用NewDoubleArray,GetArrayElementsReleaseArrayElements

创建和处理返回值