JNI将jstring转换为char *

时间:2010-11-15 06:26:33

标签: java java-native-interface

我已经通过使用JNI将URL字符串从Java传递到C代码作为jstring数据类型。我的库方法需要char *作为网址。

如何转换jstring中的char *

P.S。:在C中使用jcharArray有什么好处吗? (即在本机方法中传递char []而不是字符串)

2 个答案:

答案 0 :(得分:213)

这是我在开始使用JNI时找到的一些有用的链接

http://en.wikipedia.org/wiki/Java_Native_Interface
http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html

关于你的问题,你可以使用这个

JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString)   
{
   const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0);

   // use your string

   (*env)->ReleaseStringUTFChars(env, javaString, nativeString);
}

答案 1 :(得分:46)

首先感谢Jason Rogers的回答。

Android && cpp 应该是这样的:

const char *nativeString = env->GetStringUTFChars(javaString, nullptr);

// use your string

env->ReleaseStringUTFChars(javaString, nativeString);

可以修复此错误:

1.error:' - >'的基本操作数有非指针类型' JNIEnv {aka _JNIEnv}'

2.error:没有匹配函数来调用' _JNIEnv :: GetStringUTFChars(JNIEnv *&,_ jstring *&,bool)'

3.error:没有匹配函数来调用' _JNIEnv :: ReleaseStringUTFChars(JNIEnv *&,_ jstring *&,char const *&)'

4.add" env-> DeleteLocalRef(nativeString);"最后。