我有一个原生功能:
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;的本机函数作为一个论点。
任何帮助将不胜感激。
答案 0 :(得分:1)
std :: vector和java List是完全不同的类型,它们不起作用是正常的。
此外,MyObject是C ++定义的对象还是Java定义的对象(如果你在每个对象中定义一个,它们又是完全不同的对象!)?
通过JNI进行通信的最佳和最安全的方法是使用序列化,就像在任何两个不同的环境之间一样。
当然,它需要一些额外的工作,但从长远来看,你最终会得到更强大的代码。