source

JNI를 사용하여 문자열 배열을 Java에서 C로 전달

manysource 2023. 9. 27. 18:00

JNI를 사용하여 문자열 배열을 Java에서 C로 전달

저는 스트링 배열이 있어요.{"myname","yourname","hisname"}그리고 이 배열을 JNI를 이용해서 C로 보내려고 합니다.이에 대한 명확한 해결책을 찾을 수 없었습니다.나는 이 끈을 a로 받으려고 노력했습니다.chararray하지만 성공하지는 못합니다.

이것을 할 방법이 방법이 있습니까?

당신은 간단한 함수를 작성할 수 있습니다.jobjectArrayobject, 각각의 것을 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.
    }
}

네, 방법이 있습니다.당신은 통과할 것입니다.String[]자바 쪽에서 당신의 네이티브 메소드로 그리고 그것은 C/C++ 쪽으로 건너갈 것입니다.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);

언급URL : https://stackoverflow.com/questions/5972207/passing-string-array-from-java-to-c-with-jni