Члены класса JNI, отличные от Java

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

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

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

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

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


person Basilevs    schedule 09.03.2011    source источник
comment
comment
И финализация описана stackoverflow.com /questions/214699/ Я не могу заставить себя поверить, что нет лучших методов.   -  person Basilevs    schedule 09.03.2011