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

dum*_*lus 1 c++ java dll java-native-interface native

以下代码在JAVA中声明

private native static Vector< Double > computeSimXML(Vector < String > vDocsPath);
Run Code Online (Sandbox Code Playgroud)

我想将参数vDocsPath(定义为Vector <String>)传递给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);

}
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*rik 5

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

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

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

private native static double[] computeSimXML(String[] vDocsPath);
Run Code Online (Sandbox Code Playgroud)

JNI接口的使用数组是很多比你想做什么简单.你可以重复的进行参数GetArrayLengthGetObjectArrayElement,你可以创建和操作与返回值NewDoubleArray,GetArrayElementsReleaseArrayElements