使用JNI将字符串数组从java传递给C.
我有一个字符串数组,如{"myname","yourname","hisname"}
,我试图使用JNI将此数组发送到C. 我找不到任何明确的解决方案。 我试图把这个字符串作为一个chararray
但没有成功。
有没有办法做到这一点?
您可以编写一个简单的函数,它接受一个jobjectArray
对象,将每个对象jobjectArray
为jstring,然后在其上调用GetStringUTFChars
。
喜欢这个:
void MyJNIFunction(JNIEnv *env, jobject object, jobjectArray stringArray) { int stringCount = env->GetArrayLength(stringArray); for (int i=0; iGetObjectArrayElement(stringArray, i)); const char *rawString = env->GetStringUTFChars(string, 0); // Don't forget to call `ReleaseStringUTFChars` when you're done. } }
是的,有办法。 您可以将Java String[]
从Java端传递给您的本机方法,并将其作为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
记得要用
env->GetArrayLength(stringArray);