JNI程序中的jstring返回

JNI程序中的jstring返回,string,java-native-interface,return,String,Java Native Interface,Return,这是JNI代码 Java代码: 公共类样本1{ 公共本机字符串stringMethod(字符串文本); 公共静态void main(字符串[]args) { 系统加载库(“样本1”); 样本1样本=新样本1(); String text=sample.stringMethod(“世界”); System.out.println(“stringMethod:+text”); } } stringMethod函数的Cpp方法: JNIEXPORT jstring JNICALL Java\u Sa

这是JNI代码

Java代码:

公共类样本1{
公共本机字符串stringMethod(字符串文本);
公共静态void main(字符串[]args)
{
系统加载库(“样本1”);
样本1样本=新样本1();
String text=sample.stringMethod(“世界”);
System.out.println(“stringMethod:+text”);
}
}
stringMethod函数的Cpp方法:

JNIEXPORT jstring JNICALL Java\u Sample1\u stringMethod
(JNIEnv*env,jobject对象,jstring字符串){
const char*name=env->GetStringUTFChars(字符串,NULL);//Java字符串到C样式字符串
char msg[60]=“你好”;
jstring结果;
strcat(msg,名称);
env->ReleaseStringUTFChars(字符串,名称);
放(味精);
result=env->NewStringUTF(msg);//C样式字符串到Java字符串
返回结果;
}
当运行我的java代码时。我得到了下面的结果

stringMethod: world
但是我在字符串“world”后面加了“Hello”。我还在这里返回附加的字符串。但为什么我只得到“世界”而不是“你好世界”。我真的把这个代码弄糊涂了。我应该怎么做才能获得附加字符串的结果?

JNIEXPORT jstring JNICALL Java\u Sample1\u stringMethod
(JNIEnv*env,jobject对象,jstring字符串)
{    
const char*name=(*env)->GetStringUTFChars(env,string,NULL);
char msg[60]=“你好”;
jstring结果;
strcat(msg,名称);
(*env)->ReleaseStringUTFChars(env,string,name);
放(味精);
结果=(*env)->NewStringUTF(env,msg);
返回结果;
}

有几种方法,但我最好把代码“> const char */c>转换成C++字符串,然后转换成 jytTurray,并且很容易将BytEARE转换成java端的UTF-8。

C++方面:

const char* string = propertyValue;
std::string str = string;

jbyteArray array = env->NewByteArray(str.length());
env->SetByteArrayRegion(array,0,str.length(),(jbyte*)str.c_str());


return array;
Java/kotlin端:

String((array), Charset.defaultCharset()))

问题在别处,你的连接是完全有效的:嗯,我在代码和作者的代码之间看到的唯一区别是他使用JNI的C++语法,而JNI的C语法应该是:<代码>(*Env)-> NeXrutuutf(…)> <代码> EnV--> NexStReutUf(…)> @ No0P,当在C中使用<代码> Env函数时,语句是
(*env)->Function(env,parameters)
。但是在C++中,这会变成:<代码> EnV->函数(参数)< /代码>。