Я новичок в java, поэтому, пожалуйста, со мной.Java jbytearray access in c (JNI)
У меня есть набор классов java, которые мне нужны для выполнения моей работы, в C/C++.
И, поскольку я довольно новичок в java, я делаю это шаг за шагом. Я получил возможность вызывать java со строкой, int double и т. Д., Но конечные результаты получат байт-массив назад (pdf-документ), поэтому я попытался отправить обратно простой массив из двух элементов.
Вот ява:
public class ReturnData
{
int returnValue;
String Log;
Byte[] data = new Byte[2];
public ReturnData(int nRetVal, String szLog)
{
this.data[0] = 100;
this.data[1] = 12;
this.returnValue = nRetVal;
this.Log = szLog;
}
}
и вот код C++
jbyteArray jbyteData = (jbyteArray)jniEnvironment->GetObjectField(jobjRetData,
jniEnvironment->GetFieldID(clsReturn, "data", "Ljava/lang/ByteArray;"));
И теперь в любое время я получить доступ к (инициализация JNI удален Это работает для простых типов, так ...). jbyteData элемент, такой как:
jsize len = jniEnvironment->GetArrayLength(jbyteData);
я получаю исключение
System.AccessViolationException was unhandled
Message: Attempted to read or write protected memory. This is often an indication that other
memory is corrupt.
Любая помощь будет оценена по достоинству.
Просто любопытно, где эти строки данных заданы. Я смотрел и смотрел и не мог найти авторитетного источника, поэтому мне приходилось делать записи в блогах и вопросы веб-сайта. – saunderl
@saunderl Я добавил пример выполнения javap для ответа на полученный результат. Проверьте это –