如何在JNI和C ++实现的DLL文件之间传递参数

时间:2011-04-16 13:37:47

标签: java c++ dll java-native-interface native

以下代码在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);

}

如何获取vDocsPathjobject的值,并将dist(在JAVA中定义为Vector< Double >)返回给JAVA?

1 个答案:

答案 0 :(得分:5)

这对于从JNI开始来说不是一个好的功能 - 正确实现它将需要一些工作。

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

我建议您将功能签名更改为:

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

使用数组的JNI接口比您尝试做的更简单 lot 。您可以使用GetArrayLengthGetObjectArrayElement迭代参数,并且可以使用NewDoubleArrayGetArrayElementsReleaseArrayElements

创建和操作返回值