0

私はAndroidNDKを使用して、既存のライブラリを使用してアプリケーションを構築しようとしています。

次の関数がライブラリで宣言されています...

BYTE __stdcall InitRelay(fp_setbaud _setbaud, fp_get _get, fp_put _put, fp_flush _flush, fp_delay _delay){

これらは、InitRelayに渡されるパラメーターの宣言です...

typedef void (__stdcall *fp_setbaud)(WORD);
typedef short (__stdcall *fp_get)(WORD);
typedef void (__stdcall *fp_put)(BYTE);
typedef void (__stdcall *fp_flush)(void);
typedef void (__stdcall *fp_delay)(WORD);
 typedef short (__stdcall *fp_ProgressUpdate)(WORD);

私はこのスレッドに行ったことがありますが、それでも何をすべきかわかりません。私がしていることと彼らがしていることの違いは、パラメーターとして関数ポインターを必要とするCのネイティブ関数を呼び出したいということです。

ネイティブコードでラッパー関数を書くことを考えていましたが、それは正しいですか?私の主な問題は、与えられたネイティブコードを変更できないことですが、新しい関数を追加することはできます。私は人々が私のJavaコードを投稿するように私に頼むことを知っているので、私はそうしますが、それは文字通り役に立たないです。これは、現在javaに意味をなさないパラメータを使用した単なるメソッド呼び出しです。

 // InitRelay
    InitRelay( fp_setbaud _setbaud, fp_get _get, fp_put, fp_flush _flush, fp_delay _delay );
4

1 に答える 1

2

はい、ネイティブ ラッパーを作成します。jni にはインターフェイス関数の非常に特殊な命名要件があるため、とにかくこれを行う必要があります。自明でないデータ型も、jni 参照との間のコピー変換が必要になります。

Android はプロセスの有効期間をユーザーが認識できるセッションの有効期間にリンクしていないため、ライブラリ内のプロセス レベルの静的状態も多くの頭痛の種になる可能性があります。Android は、複数の個別のセッションを同じプロセスに配置することもできます。

于 2012-07-10T14:38:50.337 に答える