Java 如何在C+实现的JNI和DLL文件之间传递参数+;
下面的代码是用JAVA声明的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
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
创建和操作返回值