JNI - отправка экземпляров классов в C ++ - PullRequest
0 голосов
/ 11 мая 2011

Я хочу отправить похожий на структуру объект с Java на C ++. Поскольку в Java нет структур, я думаю, мне нужно написать класс, а затем отправить экземпляр этого класса.

public class soundSource {
     int posX;
     int posY;
     .....
}

Но ... jObject, который я получаю из метода JNI в C ++ - как мне извлечь отдельные поля?

Спасибо

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Ответ Денниса верен, однако есть еще один способ сделать это, который может повысить производительность, а именно с помощью прямых байтовых буферов.

Вот документы, которые вам нужно прочитать: поддержка JNI NIO , ByteBuffer

Вы выделяете прямой байтовый буфер либо на стороне Java, либо на стороне C. Затем вы заполняете буфер на стороне Java, используя методы ByteBuffer, в соответствии с компоновкой вашей c-struct. Просто помните, что эти буферы должны быть освобождены после их использования, но вы можете повторно использовать один и тот же буфер для передачи данных туда и обратно.

1 голос
/ 11 мая 2011
jstr = (*env)->GetObjectField(env, obj, fid);

См. http://java.sun.com/docs/books/jni/html/fldmeth.html.

Вы никуда не отправляете данные. Вы просто используете интерфейс JNI для JVM для доступа к данным. Вам на самом деле даже не нужно поле, чтобы быть публичным. Просто сделайте это для всех полей интересующего вас класса, и вы можете заполнить свою структуру в C ++.

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