Подтвердить что ты не робот

Передача массива строк из java в C с помощью JNI

У меня есть строковый массив вроде {"myname","yourname","hisname"}, и я пытаюсь отправить этот массив на C с помощью JNI. Я не мог найти для этого четкого решения. Я попытался взять эту строку как chararray, но не успел.

Есть ли способ сделать это?

4b9b3361

Ответ 1

Вы можете написать простую функцию, которая принимает объект 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.
    }
}

Ответ 2

Да, есть способ. Вы передали бы String[] в свой собственный метод со стороны Java, и это встретило бы на стороне C/С++ как jobjectArray. Затем вы использовали бы GetObjectArrayElement(), чтобы получить jstring в заданном индексе, а затем используйте GetStringUTFChars() или GetStringChars(), чтобы получить указатель C/С++ к базовым строковым данным.

И если вы не знаете об этом, ценная ссылка JNI Book является ценной ссылкой.

Ответ 3

это можно сделать следующим образом:

(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
}

Ответ 4

Не забудьте использовать

env->GetArrayLength(stringArray);