如何使用JNA将List <t>从Java传递到C ++ std :: vector函数参数

时间:2015-08-28 06:56:28

标签: java c++ arraylist jna

我有一个原生功能:

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

我正在使用JNA加载Native dll,我试图从Java调用此函数NativeFunction,如:

nativedlljnapointer.NativeFunction(List<MyObject>);

然而我遇到了&#34; java.lang.IllegalArgumentException:不支持的参数类型ArrayList&#34;例外。

当我遇到同样的异常时,我尝试使用java util vector&#34; java.lang.IllegalArgumentException:不支持的参数类型java.util.Vector&#34;

有人可以建议我如何将List从我的Java函数传递给具有vector&lt;&gt;的本机函数作为一个论点。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

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

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

当然,它需要一些额外的工作,但从长远来看,你最终会得到更强大的代码。