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

How to pass parameters between JNI and DLL files implemented by C++

本文关键字:文件 DLL 之间 参数 实现 JNI 和用 c++      更新时间:2023-10-16

下面的代码是用JAVA

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

我想传递参数vDocsPath(定义为Vector <字符串>)转换成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?

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

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

我建议你把函数签名改成:

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

处理数组的JNI接口比您尝试做的要简单得多。您可以使用GetArrayLengthGetObjectArrayElement对参数进行迭代,还可以使用NewDoubleArrayGetArrayElementsReleaseArrayElements创建和操作返回值