2

C インターフェイスを持つサードパーティ ライブラリに対して Java ラッパーを作成したいと考えています。このライブラリは、本質的に C++ オブジェクトである複雑な Context エンティティで動作します (C++ はそのライブラリで内部的に使用されますが、API は純粋な C です)。このエンティティを Java からアクセス可能なクラスにラップするのが自然です。そのためには、Context へのポインターをどこかに格納する必要があります。

これを行うには、次の 2 つのオプションがあります。

  • Java側で新しいメンバーを宣言し(たとえば、長い場合)、JNIメソッド実装内でポインター型に変換します
  • JNIヘッダーで新しいメンバーを宣言します(Javaがjavahによって生成された構造のサイズに依存している場合、これは違法かもしれません)

JNI のすべてのチュートリアルは単純すぎて、複雑なエンティティを Java クラスでラップする方法についてのヒントを得ることができません。より詳細なドキュメントへのリンクを歓迎します。

また、Context 破壊関数 (内部の C++ デストラクタ) を呼び出すのが適切な場所を知りたい Java は finalize メソッドを好まないため、そのために Java finalize を使用したくありません。また、破壊手順を定義する方法があると思います。ネイティブ側。

4

0 に答える 0