Я работаю над библиотекой Android, которая использует некоторый код на языке c / c ++.
У меня, видимо, какая-то ошибка кодирования, которая возникает только во время выполнения.
Ошибка: JNI DETECTED ERROR IN APPLICATION: use of invalid jobject 0x7d61e62000
Это код JNI, который я использую для вызова кода C.
JNIEXPORT jbyteArray JNICALL
Java_com_comp_complibrary_api_initializeProduct(JNIEnv *env, jobject
instance,
jbyteArray buffer_) {
jbyte *buffer = env->GetByteArrayElements(buffer_, NULL);
jbyteArray rv = (jbyteArray) initializeProduct((uint8_t *) buffer);
env->ReleaseByteArrayElements(buffer_, buffer, 0);
return rv;
}
initializeProduct
возвращает uint8_t *
.
Если я все правильно понимаю, тогда я смогу привести приведенное значение к jbyteArray
, а затем присвоить его byte[]
в одном из моих классов Java. Однако это не так.
byte[] defend = (byte[]) initializeProduct(bufferByteArray);
Вы заметите, что jbyteArray
можно привести к uint8_t *
, поскольку я передаю его в качестве параметра initializeProduct
. Проходя через код c, я могу подтвердить, что это правда.
Как правильно конвертировать / кастовать uint8_t *
в jbyteArray
?