119 votes

jni convertissant jstring en char *

J'ai passé une chaîne d'URL de java au code C en tant que type de données jstring . Et ma méthode de bibliothèque nécessite un char * en url.

Comment puis-je convertir jstring en char * ?

ps Y at-il un avantage à utiliser jcharArray en C? (ie Passing char [] au lieu de la chaîne dans la méthode native)

Merci d'avance pour votre aide.

240voto

Jason Rogers Points 8924

Voici un lien utile que j'ai trouvé lorsque j'ai commencé avec JNI

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

concernant votre problème, vous pouvez utiliser cette

 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);
}
 

52voto

kangear Points 333

Merci Jason Rogers réponse du premier.

Dans Android && rpc devrait être ceci:

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

// use your string

env->ReleaseStringUTFChars(javaString, nativeString);

Pouvez corriger cette erreur:

1.erreur: la base de l'opérande de '->' a la non-type de pointeur 'JNIEnv {aka _JNIEnv}'

2.error: no matching function for call to '_JNIEnv::GetStringUTFChars(JNIEnv*&, _jstring*&, bool)'

3.error: no matching function for call to '_JNIEnv::ReleaseStringUTFChars(JNIEnv*&, _jstring*&, const char*&)'

4.ajouter "env->DeleteLocalRef(nativeString);" à la fin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X