{"myname","yourname","hisname"}
のような文字列配列があり、[〜#〜] c [〜#〜]に[〜#〜] jniを使用してこの配列を送信しようとしています。 [〜#〜]。これに対する明確な解決策を見つけることができませんでした。この文字列をchararray
として取得しようとしましたが、成功しませんでした。
これを行う方法はありますか?
jobjectArray
オブジェクトを取得し、各オブジェクトをjstringにキャストして、そのオブジェクトに対してGetStringUTFChars
を呼び出す単純な関数を作成できます。
このような:
void MyJNIFunction(JNIEnv *env, jobject object, jobjectArray stringArray) {
int stringCount = env->GetArrayLength(stringArray);
for (int i=0; i<stringCount; i++) {
jstring string = (jstring) (env->GetObjectArrayElement(stringArray, i));
const char *rawString = env->GetStringUTFChars(string, 0);
// Don't forget to call `ReleaseStringUTFChars` when you're done.
}
}
はい、方法があります。 _String[]
_をJava側からネイティブメソッドに渡すと、それはjobjectArray
としてC/C++側に伝わります。 GetObjectArrayElement()
は特定のインデックスでjstring
を取得し、GetStringUTFChars()
またはGetStringChars()
を使用して、基になる文字列データへのC/C++ポインターを取得します。
そして、あなたがそれについて知らないなら、 JNI Book は貴重な参考文献です。
次の方法で実行できます。
(JNIEnv *env, jobject object, jobjectArray prdctini)
{
const char *param[20];
jsize stringCount = (*env).GetArrayLength(prdctini);
for (int i=0; i<stringCount; i++) {
jstring string = (jstring) (*env).GetObjectArrayElement( prdctini, i);
param[i] = (*env).GetStringUTFChars( string, NULL);
}
cout<<"U_Id="<<param[0]<<endl;
cout<<"aggregation="<<param[1]<<endl
}
使用することを忘れないでください
env->GetArrayLength(stringArray);