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

Java 如何在C+实现的JNI和DLL文件之间传递参数+;,java,c++,dll,java-native-interface,native,Java,C++,Dll,Java Native Interface,Native,下面的代码是用JAVA声明的 private native static Vector< Double > computeSimXML(Vector < String > vDocsPath); private native static VectorcomputeSimXML(VectorvDocsPath); 我想把参数VDOSPASTH(定义为vector < String >)转换成C++,JNI生成的代码如下:(我已经实现了一些) /* *类:SimXMLM

下面的代码是用JAVA声明的

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

我想把参数VDOSPASTH(定义为vector < String >)转换成C++,JNI生成的代码如下:(我已经实现了一些)

/*
*类:SimXMLModule
*方法:computeSimXML
*签名:(Ljava/util/Vector;)Ljava/util/Vector;
*/
JNIEXPORT作业对象JNICALL Java_SimXMLModule_computeSimXML
(JNIEnv*,jclass,jobject)
{
向量距离;
距离后推(5.0);
距离后推(6.0);
}

如何通过
jobject
获取
vDocsPath
的值,并将dist(在JAVA中定义为
Vector
)返回到JAVA?

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

  • Vector
    参数是一个普通的非泛型
    Vector
    运行时
  • Vector
    返回值是一个普通的非泛型
    Vector
    运行时
  • 您需要检索类和方法ID,并调用
    Vector
    函数从参数中获取数据
  • 您需要构造一系列
    Double
    对象,设置内部
    Double
    并调用
    Vector
    方法来设置返回值
我建议您将函数签名更改为:

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

用于处理阵列的JNI接口比您正在尝试的要简单得多。您可以使用
GetArrayLength
GetObjectArrayElement
迭代参数,还可以使用
NewDoubleArray
创建和操作返回值,
GetArrayElements
releaseArayElements

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

  • Vector
    参数是一个普通的非泛型
    Vector
    运行时
  • Vector
    返回值是一个普通的非泛型
    Vector
    运行时
  • 您需要检索类和方法ID,并调用
    Vector
    函数从参数中获取数据
  • 您需要构造一系列
    Double
    对象,设置内部
    Double
    并调用
    Vector
    方法来设置返回值
我建议您将函数签名更改为:

private native static double[] computeSimXML(String[] vDocsPath);
用于处理阵列的JNI接口比您正在尝试的要简单得多。您可以使用
GetArrayLength
GetObjectArrayElement
迭代参数,还可以使用
NewDoubleArray
GetArrayElements
ReleaseArayElements
创建和操作返回值