[英]JNI converting jstring to char *
I have passed a URL string from Java to C code as jstring
data type through the use of JNI.我已经通过使用 JNI 将 URL 字符串作为
jstring
数据类型从 Java 传递到 C 代码。 And my library method needs a char *
as url.我的库方法需要一个
char *
作为 url。
How can I convert jstring
in char *
?如何将
jstring
转换为char *
?
PS: Is there any advantage of using jcharArray in C? PS:在 C 中使用 jcharArray 有什么好处吗? (ie Passing
char []
instead of string in native method) (即在本地方法中传递
char []
而不是 string)
Here's aa couple of useful link that I found when I started with JNI这是我开始使用 JNI 时发现的一些有用链接
http://en.wikipedia.org/wiki/Java_Native_Interface http://en.wikipedia.org/wiki/Java_Native_Interface
http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html
concerning your problem you can use this关于您的问题,您可以使用它
JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString)
{
const char *nativeString = env->GetStringUTFChars(javaString, 0);
// use your string
env->ReleaseStringUTFChars(javaString, nativeString);
}
Thanks Jason Rogers's answer first.首先感谢杰森罗杰斯的回答。
In Android && cpp should be this:在Android && cpp 中应该是这样的:
const char *nativeString = env->GetStringUTFChars(javaString, nullptr);
// use your string
env->ReleaseStringUTFChars(javaString, nativeString);
Can fix this errors:可以修复这个错误:
1.error: base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}' 1. 错误:'->' 的基操作数具有非指针类型 'JNIEnv {aka _JNIEnv}'
2.error: no matching function for call to '_JNIEnv::GetStringUTFChars(JNIEnv*&, _jstring*&, bool)' 2.错误:没有匹配的函数调用'_JNIEnv::GetStringUTFChars(JNIEnv*&, _jstring*&, bool)'
3.error: no matching function for call to '_JNIEnv::ReleaseStringUTFChars(JNIEnv*&, _jstring*&, char const*&)' 3.错误:没有匹配的函数调用'_JNIEnv::ReleaseStringUTFChars(JNIEnv*&, _jstring*&, char const*&)'
4.add "env->DeleteLocalRef(nativeString);" 4.添加“env->DeleteLocalRef(nativeString);” at end.
最后。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.