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