JNI convirtiendo jstring a char *


He pasado una cadena URL de Java al código C como jstring tipo de datos a través del uso de JNI. Y mi método de biblioteca necesita un char * como url.

¿Cómo puedo convertir jstring en char * ?

P.d.: ¿Hay alguna ventaja de usar jcharArray en C? (es decir, Pasando char [] en lugar de string en el método nativo)

 102
Author: Universal Electricity, 2010-11-15

2 answers

Aquí hay un par de enlaces útiles que encontré cuando empecé con JNI

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

Con respecto a su problema, puede usar esto

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);
}
 204
Author: Jason Rogers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-04 10:32:57

Primero, gracias por la respuesta de Jason Rogers.

En Android && cpp debe ser esta:

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

// use your string

env->ReleaseStringUTFChars(javaString, nativeString);

Puede corregir estos errores:

1.error: el operando base de '- > 'tiene un tipo no puntero' JNIEnv {aka _JNIEnv} '

2.error: no hay función coincidente para la llamada a'_JNIEnv:: GetStringUTFChars(JNIEnv*&, _jstring*&, bool)'

3.error: no hay función coincidente para la llamada a'_JNIEnv:: ReleaseStringUTFChars(JNIEnv*&, _jstring*&, char const*&)'

4.añadir "env - >DeleteLocalRef (nativeString);" al final.

 43
Author: kangear,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-01 03:48:27