如何在JNI和用c++实现的DLL文件之间传递参数
How to pass parameters between JNI and DLL files implemented by C++
下面的代码是用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接口比您尝试做的要简单得多。您可以使用GetArrayLength
和GetObjectArrayElement
对参数进行迭代,还可以使用NewDoubleArray
、GetArrayElements
和ReleaseArrayElements
创建和操作返回值
相关文章:
- 挂起和取消挂起一个文件DLL
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- 将 dll 文件注入 UWP
- 加载"D:UsersPublicDocumentsopencvbuildx64vc14binopencv_world340d.dll",找不到或打开PDB文件
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 在使用 Clang 编译 DLL 时指定 DEF 文件
- 从 .lib 文件创建一个.dll文件
- 可执行文件C++包括.obj,.lib和.dll吗?
- python37.dll在可执行文件中未链接
- 链接器找不到导入的 DLL 的 LIB 文件
- DLL:当 SDK 头文件不使用 __declspec(dllexport) 时,我可以使用它吗
- sf::Windows上的音乐:api-ms-win-crt-locale-l1-1-0.dll:无法打开共享对象文件
- 如何在 CMake 超级生成中查找 dll/so 文件
- 在任何平台上执行任何Qt5应用程序的重要dll文件是什么(运行时文件dll)
- 在C++的应用程序中包括文件(dll,txt等.exe
- 反编译文件.dll
- 另一台电脑上的C++程序所需的文件/DLL