JNI - Как преобразовать jshortArray в короткий * - PullRequest
1 голос
/ 07 апреля 2011

У меня есть файл dll , который содержит следующая функция:

unsigned char * EncodingData(short Data[], int Length);

Я хочу назвать этот нативный метод в Яве. Итак, я создал один обертка DLL , которая содержит следующую функцию, соответствующую вышеуказанная функция

JNIEXPORT jcharArray JNICALL Java_com_common_FilterWrapper_EncodingData (JNIEnv * env, jclass cls, jshortArray shortData, jint len)

Теперь я звоню выше JNI функция из Java, и это в настоящее время Вызов успешно.

Проблема:

Я хочу вызвать функцию файла dll из функции оболочки dll , но я не знаю, как преобразовать следующее:

  • jshortArray до short [] (для передачи данных в функцию файла dll , которая ожидает short [] а не jshortArray )

  • беззнаковый символ до jcharArray (чтобы вернуть значение обратно в функцию java)

Примечание: DLL-оболочка написана на VC ++

Ответы [ 2 ]

0 голосов
/ 27 апреля 2017
unsigned short tempElem;
jshort* test = env->GetShortArrayElements(shortData, NULL);
int size = (sizeof(test) / sizeof(*test)) - 1;
for (int i = 0; i < size; i++) {
    tempElem = (unsigned short)test[i]);
    printf("[%d] test %u  || size = %d\n", i, tempElem, size);
}
0 голосов
/ 07 апреля 2011

Это описано в документации JNI .

Подведем итог:

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

Во-вторых, программисты могут использовать другое набор функций для извлечения закрепленная версия элементов массива. Имейте в виду, что эти функции могут требуется Java VM для выполнения хранения размещение и копирование. Будь эти функции фактически копируют массив зависит от реализации виртуальной машины

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