JNI не члены класса Java - PullRequest
       1

JNI не члены класса Java

2 голосов
/ 09 марта 2011

Я хочу создать оболочку Java для какой-нибудь сторонней библиотеки с интерфейсом C. Библиотека работает со сложным объектом Context, который по сути является объектом C ++ (C ++ используется внутри этой библиотеки, но API находится в чистом C). Было бы естественно заключить эту сущность в класс, доступный из Java. Для этого указатель на Context должен храниться где-то.

Я вижу два варианта сделать это:

  • для объявления нового члена на стороне Java (например, long) и преобразования его в тип указателя внутри реализации методов JNI
  • для объявления нового члена в заголовке JNI (Это может быть недопустимо, если Java полагается на размер структуры, выделенной для меня javah)

Все учебники по JNI слишком просты, чтобы дать мне подсказку о том, как обернуть сложные сущности классами Java, любые ссылки на более подробную документацию приветствуются.

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

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