java — JNA: массив символов как параметр функции

Используя JNA, я загружаю DLL, написанную на C ++, и вызываю функцию, присутствующую в этой функции C ++:

 int xxfunction(Char* ptr){...}

Здесь мне нужно отправить массив символов, чтобы функция присваивала ему значение. В основном мне нужно передать массив символов по ссылке.

Согласно документации JNA, C ++ char* эквивалент в Java String, поэтому я создал объект String и передал его функции, как показано ниже:

Объявление функции Java:

interface foo extends Library
{
....//loading dll and other work
int xxfunction(String chararray);//function declaration
}

Вызов функции Java:

public static void main(String args[])
{
String str="abcd";
int i=fooinstance.xxfunction(str);//function call
}

но когда я выполнил этот код, он дает мне:

Неустранимая ошибка была обнаружена средой выполнения Java:
Не удалось записать дамп ядра. Мини-дампы по умолчанию не включены
клиентские версии Windows

Авария произошла за пределами виртуальной машины Java в собственном коде. Смотрите проблемный кадр, где сообщать об ошибке.

Так это правильный способ передачи String в качестве аргумента, где функция ожидает указатель на символ?
Символьный эквивалент C ++ в Java является байтовым, так что мне нужно передать байтовый массив в качестве параметра?

Я даже не могу передать объект Pointer из JNA в функцию, потому что это дает мне IllegalargumentException,

2

Решение

Только const char* должен быть когда-либо сопоставлен с Java String, Если есть такая возможность не являющийся const, вы должны передать буфер вместо (byte[], Memoryили NIO Buffer), а затем используйте Native.toString() на «возвращаемое» значение.

В качестве стиля вы всегда должны указывать вызываемому абоненту длину предоставленного буфера, чтобы у него было достаточно информации, чтобы избежать перезаписи буфера.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]