2011-04-18 100 views
2

您好我想要将字符串从jni传递给java到android-ndk中的java。 假设这是我的本地功能。如何在函数参数中将char字符串的值传递给java字符串(JNI到Java)?

private native int myFunc(String buffer); 

这是我在JNI本机功能:

jint Java_com_example_twolibs_myFunc(JNIEnv* env, jobject thiz, jstring buffString){ 
    //I want to pass a character array to buffString from here, that I would read from java as String. 
return 0; 
} 

怎么办呢?

+0

我不认为你可以做到这一点 - 重新分配一个新的值作为参数传递给对象。我会创建新的字符串对象并将其返回。 – 2012-09-21 11:16:46

回答

2

我无法完全解析这个问题。传递一个字符串“从Java到Java的Java”听起来多余。

如果您只想从本地代码获取String的内容,则可以使用JNI GetStringUTFChars来获取UTF-8表示形式。字符串是不可变的,不能直接修改。你可以用NewStringUTF从本地创建一个新的String。

请注意,传递给NewStringUTF的字符串数据必须为“修改的UTF-8”形式。请参阅JNI文档以获取对此含义的解释。

如果您只想传递字符,您可能需要使用char []缓冲区(GetCharArrayElements,ReleaseCharArrayElements)。请注意,Java语言字符是UTF-16,因此“jchar”是一个无符号的16位值(不要试图将它们视为C++ 8位“char”)。

+0

我想调用result = myFunc(testString),其中testString将包含从jni传递的值。 注意:我在Java中创建了testString并传递给本地函数。 GetStringUTFChars用于从jstring中获取值,但是如何将该值设置为本地函数中的jstring缓冲区? – StarDust 2011-04-20 04:43:38

+0

Java语言字符串是不可变的。你不能从JNI重写它们。你可以使用NewStringUTF来创建一个新的字符串,然后从你的JNI方法中返回(它需要返回jstring而不是jint)。 – fadden 2011-04-20 17:45:32

相关问题