如何通过List<T>从Java到c++的std::vector函数参数使用JNA

How to pass List<T> from Java to a C++ std::vector function parameter using JNA

本文关键字:vector JNA std 函数 参数 List 何通过 Java c++      更新时间:2023-10-16

我有一个本地函数:

int NativeFunction(std::vector<MyObject>);

我正在使用JNA加载本机dll,我试图从Java调用这个函数NativeFunction,如:

nativedlljnapointer.NativeFunction(List<MyObject>);

然而,我遇到了"java.lang. lang. "IllegalArgumentException:不支持的参数类型ArrayList"异常。

当我遇到相同的异常"java.lang. lang"时,我尝试使用java util vector。

不支持参数类型

有人可以建议我如何将列表从我的Java函数传递到具有vector<>作为参数的本机函数。

任何帮助都将非常感激。

std::vector和java List是完全不同的类型,它们不能正常工作是很正常的。

此外,MyObject是c++定义的对象还是Java定义的对象(如果你在每个对象中定义一个,它们又是完全不同的对象!)?

通过JNI进行通信的最好和最安全的方法是使用序列化,就像在任何两个不同的环境之间一样。

当然,这需要一些额外的工作,但从长远来看,您最终会得到更健壮的代码。