Я пытаюсь связать Java-программу с DLL, используя JNA.
В моей C ++ DLL у меня есть функция, которая принимает char**
. JNA API подразумевает, что должно быть сопоставлено с String[]
в Java.
Так что, насколько я знаю, 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
, то действительно кажетсяразрешить запуск программы, но я не уверен, как конвертировать String[]
в любой из этих типов.