使用 JNI 将字符串数组从 java 传递到 C

IT小君   2021-10-25T02:43:48

我有一个字符串数组一样{"myname","yourname","hisname"},我想这个数组发送到ç使用JNI我找不到任何明确的解决方案。我试图将这个字符串作为一个chararray但没有成功。

有没有办法做到这一点?

点击广告,支持我们为你提供更好的服务
评论(4)
IT小君

您可以编写一个简单的函数,它接受一个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.
    }
}
2021-10-25T02:43:48   回复
IT小君

是的,有办法。您将从String[]Java 端将 传递到您的本机方法中,这将作为jobjectArray. 然后,您将使用在给定索引处GetObjectArrayElement()获取 a jstring,然后使用GetStringUTFChars()GetStringChars()获取指向底层字符串数据的 C/C++ 指针。

如果您不知道,JNI Book是一个有价值的参考。

2021-10-25T02:43:48   回复
IT小君

它可以通过以下方式完成:

(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
}
2021-10-25T02:43:48   回复
IT小君

记得用

env->GetArrayLength(stringArray);
2021-10-25T02:43:49   回复