Передача массива строк из java в C с помощью JNI
У меня есть строковый массив вроде {"myname","yourname","hisname"}
, и я пытаюсь отправить этот массив на C с помощью JNI. Я не мог найти для этого четкого решения. Я попытался взять эту строку как chararray
, но не успел.
Есть ли способ сделать это?
Ответы
Ответ 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);