如何使用 JNA 将 List<T> 从 Java 传递给 C++ std::vector 函数参数
How to pass List<T> from Java to a C++ std::vector function parameter using JNA
我有一个原生函数:
int NativeFunction(std::vector<MyObject>);
我正在使用 JNA 加载本机 dll,我正在尝试从 Java 调用此函数 NativeFunction,例如:
nativedlljnapointer.NativeFunction(List<MyObject>);
然而我 运行 陷入 "java.lang.IllegalArgumentException: Unsupported argument type ArrayList" 异常。
当我 运行 遇到相同的异常时,我尝试使用 java util vector "java.lang.IllegalArgumentException: Unsupported argument type java.util.Vector"
有人可以建议我如何将 List 从我的 Java 函数传递给以 vector<> 作为参数的本机函数。
任何帮助将不胜感激。
std::vector 和javaList 是完全不同的类型,不能正常工作。
此外,MyObject 是 C++ 定义的对象还是 Java 定义的对象(如果您分别定义一个,它们又是完全不同的对象!)?
通过 JNI 进行通信的最佳和最安全的方法是使用序列化,就像您在任何两个不同环境之间所做的那样。
当然,这需要一些额外的工作,但在漫长的 运行 中,您最终会得到更健壮的代码。
我有一个原生函数:
int NativeFunction(std::vector<MyObject>);
我正在使用 JNA 加载本机 dll,我正在尝试从 Java 调用此函数 NativeFunction,例如:
nativedlljnapointer.NativeFunction(List<MyObject>);
然而我 运行 陷入 "java.lang.IllegalArgumentException: Unsupported argument type ArrayList" 异常。
当我 运行 遇到相同的异常时,我尝试使用 java util vector "java.lang.IllegalArgumentException: Unsupported argument type java.util.Vector"
有人可以建议我如何将 List 从我的 Java 函数传递给以 vector<> 作为参数的本机函数。
任何帮助将不胜感激。
std::vector 和javaList 是完全不同的类型,不能正常工作。
此外,MyObject 是 C++ 定义的对象还是 Java 定义的对象(如果您分别定义一个,它们又是完全不同的对象!)?
通过 JNI 进行通信的最佳和最安全的方法是使用序列化,就像您在任何两个不同环境之间所做的那样。
当然,这需要一些额外的工作,但在漫长的 运行 中,您最终会得到更健壮的代码。