我有一个像{"myname","yourname","hisname"}
字符串数组,我试图发送此数组C与使用JNI。我找不到任何明确的解决方案。我试图把这个字符串作为chararray
,但没有成功。传递字符串数组从Java到C与JNI
有没有办法做到这一点?
我有一个像{"myname","yourname","hisname"}
字符串数组,我试图发送此数组C与使用JNI。我找不到任何明确的解决方案。我试图把这个字符串作为chararray
,但没有成功。传递字符串数组从Java到C与JNI
有没有办法做到这一点?
您可以编写一个简单的函数,该函数需要一个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.
}
}
是的,有一种方法。您将从Java端将String[]
传递到您的本地方法中,并将以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
}
'ReleaseStringUTFChars'如何? – 2014-07-10 10:01:40
记住使用
env->GetArrayLength(stringArray);
THX以供参考。我读过它。我解决了将字符串发送到C端的问题。我尝试发送阵列练习并取得成功。 Thx寻求帮助。有两个正确的答案,如果你不介意,我想给代表8ball ... – Aykut 2011-06-13 10:42:39
“JNI书”的链接已损坏。 – 2016-12-20 09:20:18