【发布时间】:2023-03-31 07:21:01
【问题描述】:
我正在尝试使用 JNA 将 java 程序链接到 dll。
在我的 C++ DLL 中,我有一个接收 char** 的函数。 JNA API 意味着应该映射到 Java 中的 String[]。
据我所知,Foo(..., char** bar, ...) 应该变成native Foo(..., String[] bar, ...)。但是,当我尝试运行该程序时,我得到了一个异常。
java.lang.ExceptionInInitializerError
Caused by: java.lang.IllegalArgumentException: class [Ljava.lang.String; is not a supported argument type (in method Foo in class DLL)
at com.sun.jna.Native.register(Native.java:1604)
at com.sun.jna.Native.register(Native.java:1529)
at com.sun.jna.Native.register(Native.java:1252)
at DLL.<clinit>(TrajParser.java:28)
如果我将 java 端的签名更改为 byte[] 或 PointerByReference 它确实似乎允许程序启动,但我不确定如何转换我的 @987654329 @ 到其中任何一种类型中。
【问题讨论】: