Я пытаюсь использовать библиотеку C++ в Java с JNA. В заголовочном файле библиотеки У меня есть метод следующее заявление:Сопоставление const char ** с типом Java с JNA
extern "C" void foo(const char** bar);
paramterer bar
должен быть передан foo
пустой, и foo
Vill присвоить ему значение, которое я хочу извлечь в Java. Как должно быть настроено соответствующее объявление Java-метода (например, какой тип Java должен указывать bar
) и как его использовать?
Я попытался следующие объявления Java:
void foo(String bar);
void foo(String[] bar);
void foo(Pointer bar);
Они все результат в следующей ошибки, когда я звоню foo
:
Exception in thread "main" java.lang.Error: Invalid memory access
После Javadoc [сортировочной] (https://jna.java.net/javadoc/overview-summary.html#marshalling) 'String []'. Если вы получаете источники [JNA] (https://github.com/java-native-access/jna.git), у вас есть обновленная документация в './Www'. – SubOptimal
Связанная документация предлагает 'String []' для 'char **'. Имеет ли значение 'const char **' значение? Использование 'String []' дает мне ошибку, упомянутую в вопросе. – Anders
@SubOptimal После тестирования еще немного, получается, используя 'String []' works - я просто не смог заставить его работать из-за несвязанной ошибки. Если вы хотите написать ответ на основе ваших комментариев, не стесняйтесь делать это. В противном случае я напишу сам ответ. Спасибо. – Anders