根据
GetStringUTFChars,最后一个参数是一个指向jboolean的指针.
更改
return env->GetStringUTFChars(returnString,JNI_FALSE);
至
return env->GetStringUTFChars(returnString,NULL);
或者更好的是,返回一个std :: string
std::string DiagLayerContainer_getDESC(...) {
...
const char *js = env->GetStringUTFChars(returnString,NULL);
std::string cs(js);
env->ReleaseStringUTFChars(returnString,js);
return cs;
}
我已经构建了一个类似的简单示例和代码,到目前为止似乎很好.
虽然,有两种可能的错误来源.
第一个是方法签名.试试“()Ljava / lang / String;”而不是“(Ljava / lang / Object;)Ljava / lang / String;”.
第二个是java源代码本身.如果java方法返回空字符串,则CallObjectMethod()将返回NULL jstring,而GetStringUTFChars()将失败.
添加一个
if (returnString == NULL)
return NULL;
在CallObjectMethod()之后.
所以查看java源代码,看看方法getDESCDiagLayer()是否可能返回一个空字符串.