Ответ 1
Вот рабочий пример, который я только что снял с своей библиотеки AS/400 JNI, чтобы разрешить собственный указатель пользовательской очереди для проверки существования очереди - он копирует библиотеку очереди и имя из массива байтов Java (уже переведенный в CCSID задания) в собственный код и использует его. Обратите внимание на вызовы функции освобождения; они могут быть изменены для копирования содержимого собственного массива обратно в массивы байт Java для перемещения данных другим способом:
JNIEXPORT jboolean JNICALL Java_com_mycompany_jni400_UserQueue_jniResolve(JNIEnv *jep,jobject thsObj,
jbyteArray queueLibrary,jbyteArray queueName) {
jbyte *lib,*nam;
bool rtn;
thsObj=thsObj;
lib=(*jep)->GetByteArrayElements(jep,queueLibrary,0);
nam=(*jep)->GetByteArrayElements(jep,queueName,0);
rtn=(usrq_resolve((byte*)lib,(byte*)nam)!=NULL);
(*jep)->ReleaseByteArrayElements(jep,queueLibrary,lib,JNI_ABORT); /* abort to not copy back contents */
(*jep)->ReleaseByteArrayElements(jep,queueName ,nam,JNI_ABORT); /* abort to not copy back contents */
if(rtn) { return JNI_TRUE; }
else { return JNI_FALSE; }
}