JNI String return value

后端 未结 1 450
栀梦
栀梦 2021-01-21 02:34

I have a Java instance method which returns a String and I\'m calling this method through JNI in C++. I have written the following code:

const char *DiagLayerCon         


        
1条回答
  •  失恋的感觉
    2021-01-21 03:23

    According to GetStringUTFChars, the last parameter is a pointer to jboolean.

    Change

    return env->GetStringUTFChars(returnString, JNI_FALSE);
    

    to

    return env->GetStringUTFChars(returnString, NULL);
    

    Or better yet, return a std::string

    std::string DiagLayerContainer_getDESC(...) {
        ...
        const char *js = env->GetStringUTFChars(returnString, NULL);
        std::string cs(js);
        env->ReleaseStringUTFChars(returnString, js);
        return cs;
    }
    

    I've built a similar simple example and the code as is, seems fine so far.

    Although, there are two possible error sources.

    The first one is the method signature. Try "()Ljava/lang/String;" instead of "(Ljava/lang/Object;)Ljava/lang/String;".

    The second one is in the java source itself. If the java method returns a null string, CallObjectMethod() will return a NULL jstring and GetStringUTFChars() fails.

    Add a

    if (returnString == NULL)
        return NULL;
    

    after CallObjectMethod().

    So look into the java source and see, whether the method getDESCDiagLayer() might return a null string.

    0 讨论(0)
提交回复
热议问题