私は少しグーグルで検索しましたが、私の質問に対する適切な答えが実際には見つかりませんでした: ネイティブの jni コードから Java にエラー情報を返す慣習的な方法は何ですか?
私は通常、デザインを選んでそれを使用しますが、このコードは 5 ミリ秒ごとに (約) 呼び出されるため、これを行うための慣習的な「クリーンで効率的な」方法があるかどうかを尋ねたいと思いました。
私の見方では、次の 4 つの明白なオプションがあります。
呼び出しごとに、java で「エラー リターン」オブジェクトを作成し、それを JNI に渡します。問題がある場合、ネイティブ コードはこのオブジェクトにエラーの説明を入力し、Java コードは戻り時にそれをチェックします。エラーは一般的なケースではないため、GC がクリーンアップするために多くのオブジェクトが作成され、それらの 99.99% は不要です。
#1 と同様に、Java クラスに単一の「エラー リターン」オブジェクトを作成し、各メソッド呼び出しに何度も渡されます。エラーが返されるたびに Java コードで確認してください。これは私には危険に思えますが、おそらくそれは適切なオプションですか?
該当する場合は、エラーの説明を含むオブジェクトをネイティブ コードで作成し、それを戻り値として Java に返します。Java で呼び出した後、null の戻りを確認します。これは#1よりも無駄がないように見えますが、少しぎこちないようです。
jni メソッドで整数の戻り値を作成し、ネイティブ コードの「終了」値に対応する int を返すだけです。Java マップで考えられるすべてのネイティブ終了状態を列挙します。戻り値を '0' と比較し、必要に応じてこのマップでエラーを調べます。これは他の方法よりも効率的に見えますが、ネイティブ コードを変更すると誰かが戻って「エラー テーブル」を更新する必要があるため、扱いにくいように見えます。
明らかな何かが欠けているように感じます...洞察を提供できるグルがそこにいますか?
ありがとう!