私のネイティブ関数は char ** を引数として受け入れます。JNIを使用して渡す方法を教えてください。
私のネイティブ関数プロトコル - long processInput(const char* str1 , char ** output);
ありがとう
私のネイティブ関数は char ** を引数として受け入れます。JNIを使用して渡す方法を教えてください。
私のネイティブ関数プロトコル - long processInput(const char* str1 , char ** output);
ありがとう
これは(まだ)完全な答えではありませんが、コメントするには長すぎます。
Java に自然に適合するように、Java でネイティブ関数宣言を作成することから始めます。おそらく、次のいずれかが適切でしょう。
static native String processInput(String input);
static native byte[] processInput(byte[] input);
次に、関数をラップするには、次のことを知っておく必要があります。
char
パラメータが文字列を表す
場合、output
返す必要がありますか?null
null
これを直接行うことはできませんが、JNI を使用して任意の関数名を簡単に呼び出すこともできません。そのため、単純なネイティブ ラッパー メソッドが必要になります。Android ndk ディストリビューションの samples/ ディレクトリにある hello-jni サンプルから始めて、そのままビルドしてすべてが機能することを確認してから、次のように変更します。
long processInput(const char* str1 , char ** output);
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
//return (*env)->NewStringUTF(env, "Hello from JNI !");
char *outputstr;
processInput("some input", &outputstr);
return (*env)->NewStringUTF(env, outputstr);
}
エラーチェックを追加したり、jni から入力文字列を取得したりすることもあるでしょう。