我有一个字符串数组,如{"myname","yourname","hisname"}
,我想使用JNI将它发送到C。我找不到任何清晰的解决方案。我尝试将这个字符串作为一个chararray
,但没有成功。
是否有办法实现这个目标?
我有一个字符串数组,如{"myname","yourname","hisname"}
,我想使用JNI将它发送到C。我找不到任何清晰的解决方案。我尝试将这个字符串作为一个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.
}
}
是的,有一种方法。您可以从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
如何? - Dmitry Zaytsev记得使用
env->GetArrayLength(stringArray);
jobject object
吗? - user1893354jstring
对象上调用DeleteLocalRef
吗? - Violet Giraffe