Je pense que cela devrait avoir une réponse simple car je peux le faire facilement avec un String
java, mais quelque chose ne va pas avec le CharSequence
. Mon code Java initialise un cppGenerator
, transmet un functionBlock object
à son generateImplementation method
et renvoie un CharSequence
. Voici mon code:Comment convertir java CharSequence en C++ char * en JNI
jobject fBlock = env->CallObjectMethod(structuredTextModel, getFunction);
jclass CPPGenerator = lookForClass(env, "Path/CPPGenerator");
jobject CPPGeneratorImpl = invokeClassObj(env, CPPGenerator);
jmethodID generateImplementation = env->GetMethodID(CPPGenerator, "generateImplementation", "(LPath/FunctionBlock;)Ljava/lang/CharSequence;");
jobject mid = env->CallObjectMethod(CPPGeneratorImpl, generateImplementation, fBlock);
jstring jresult = (jstring)mid;
char* result = (char*)env->GetStringUTFChars(jresult, 0);
Cette logique a travaillé pour moi lors de l'utilisation String
mais cette fonction retourne un CharSequence
. Aucune classe, aucun objet ou méthode ne renvoie null. Le programme se bloque en jni.h
en essayant d'appeler GetStringUTFChars
. Donc je sais que je ne peux pas utiliser cette méthode pour CharSequence. Y at-il juste une méthode jni qui me manque ou dois-je faire quelque chose de complètement différent pour un CharSequence?
ahah, charAt. C'est ce que je cherchais. Je pensais que je devrais faire quelque chose comme ça s'il n'y avait pas de méthode intégrée. Merci cela fonctionne parfaitement pour mon code. –
Etes-vous sûr de ne pas recevoir d'avertissement ici: jchar est plus large que char? Dans tous les cas, le rétrécissement est à la fois sans perte et précis si le jeu de caractères cible est ASCII ou ISO 8859-1. Vous pouvez utiliser 'std :: wstring' pour rester avec UTF-16 (jchar). –
@TomBlodget J'avais oublié ce fait. Mais avoir un encodage compatible est une condition préalable pour utiliser 'GetStringUTFChars' de toutes les façons, donc cela devrait toujours être un équivalent correct. –