Как вернуть массив в JNI? - PullRequest
       14

Как вернуть массив в JNI?

4 голосов
/ 06 октября 2011

У меня есть встроенная функция, к которой я обращаюсь через JNI, которая должна возвращать содержимое массива в java.Мой прототип функции выглядит следующим образом:

JNIEXPORT jcharArray JNICALL Java_jniusb_Main_receiveData
  (JNIEnv *, jclass, jchar);

, который был сгенерирован с помощью javah.exe.

Так что в коде функции у меня есть массив 'unsigned char InputPacketBuffer [65]', который я хочувернуться в Яву.Однако у меня возникли проблемы с отображением этого типа возвращаемого значения 'jcharArray'.

В другой функции я использовал метод 'GetCharArrayRegion', предоставленный JNI, чтобы преобразовать входной параметр типа 'jcharArray' в массив 'jchar', который я мог затем преобразовать в массив 'unsigned char'.По сути, мне нужно сделать обратное для преобразования в другом направлении, но я не смог найти подходящий метод JNI в pdf спецификации JNI.Кто-нибудь знает, как это сделать?

ОБНОВЛЕНИЕ:

Я нашел правильную функцию JNI по ссылке Энди - SetCharArrayRegion ().

fyi - "Java Native Interface - руководство и спецификация для программиста" дает неверные примеры использования их функций.

, т.е.

(*env)->SetCharArrayRegion(env, elemArr, 0, len, chars); 

не компилируется.Вместо этого правильный синтаксис:

(*env).SetCharArrayRegion(elemArr, 0, len, chars);

1 Ответ

4 голосов
/ 06 октября 2011

См. Документацию JNI по операциям с массивами .Аналогом GetCharArrayRegion является SetCharArrayRegion.

jchar - это короткий, а не символ.Java поддерживает символы Unicode.Если вам нужен массив байтов, вы можете использовать jbytearray.

Альтернативой является использование Строковых операций JNI .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...