我有一个字符串数组一样{"myname","yourname","hisname"}
,我想这个数组发送到ç使用JNI。我找不到任何明确的解决方案。我试图将这个字符串作为一个chararray
但没有成功。
有没有办法做到这一点?
我有一个字符串数组一样{"myname","yourname","hisname"}
,我想这个数组发送到ç使用JNI。我找不到任何明确的解决方案。我试图将这个字符串作为一个chararray
但没有成功。
有没有办法做到这一点?
是的,有办法。您将从String[]
Java 端将 传递到您的本机方法中,这将作为jobjectArray
. 然后,您将使用在给定索引处GetObjectArrayElement()
获取 a 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);
您可以编写一个简单的函数,它接受一个
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. } }