Преобразование вкладки char * [10] в объект Java (JNI) - PullRequest
0 голосов
/ 17 декабря 2010

Я пытаюсь использовать C API в Java, используя JNI.Я не программист на C ...

Вот "объект" C, который я должен преобразовать: char * tab [10]

Во-первых, я не уверен, что это значит: это указатель на вкладку char или вкладку указателей на char?(и есть ли какая-либо разница?).

Тогда, что будет эквивалентный объект Java?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2010

char * tab [10] - указатель на массив символов (точки на первом элементе).

Вот API JNI: http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/jniTOC.html

Эквивалент типа для "C char"в JNI - jchar - в java это примитивный тип" char";Возможности того, что вы можете сделать с массивом "C chars": скопировать его в существующий объект String в java ИЛИ в массив примитивных символов java.Полезная ссылка: http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html#array_operations

Второй способ может выглядеть так:

вы передаете массив java char в вызов JNI или создаете новый массив java из кода C с помощью New <<em> PrimitiveType > Array функция.Однако вы закончите указателем на массив в Java.Они копируют ваши символы C в java:

jEnv->ReleaseCharArrayElements(javaCharArray, C_CharArray, JNI_COMMIT);

где jEnv - среда Java, проходящая через вызов JNI.В случае, если у вас есть указатель, вам может понадобиться разыменовать его как * C_CharArray.Я думаю, это может сработать.

0 голосов
/ 17 декабря 2010

Это (скорее всего) массив из 10 строк, поэтому он будет смоделирован напрямую как:

String[] tab = new String[10];

Также возможно, что это массив буферов символов, поэтому вы можете использовать StringBuilder вместо String. И помните, массивы Java являются объектами сами по себе и знают свой размер, так что информация не привязана к типу (в отличие от C, где размеры массива являются характеристиками типа).

Я не ожидал бы прямой передачи типа / значения через JNI; там вам понадобится какой-нибудь конверсионный код.

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