(cross, et je pense aussi qu'il faut passer par du crade, genre manipuler SP, ce qui ultra bof si le wrapper a des variables locales, et qui n'est pas portabe)
ah bah oui en JNI c'était forcément prévu ce genre de truc, t'aurais du le dire ^^
pour la peine tu t'autofouetteras 42 fois ce soir, ça t'apprendra.
c'est une méthode java a arguments variable type Formatter.format(String,...) que t'appelles?
parce que dans ce cas niveau java les args sont passés dans un Object[]
avec cette api tu as un va_arg mais ils doivent correspondre a la signature de la méthode que tu appelles...
oui c'est absolument normal, en java un tableau est un objet instance de la classe tableau de truc, il faut le construire à la main , y ajouter des instances de string construites à partir de tes char*, puis le passer à main().
un tableau de string est totalement différent qu'une liste de paramètres, dans le premier cas tu as un unique argument de type tableau, dans le 2e cas tu fais un truc non autorisé parce que la méthode que tu appelles DOIT avoir le prototype requis, tu peux pas lui passer n'importe quoi!
(et non c'est pas normal, il faut utiliser va_end, en général il fait rien mais on sait jamais)
edit: tu vas devoir utiliser
NewObjectArray(env,len,class,init=null)
SetObjectArrayElement(env,arr,index,val)
en donnant à la dernière des trucs obtenus avec NewStringUTF ou NewString si tu veux utiliser l'encodage local
après le retour de ta fonction tu devras utiliser ReleaseString[UTF]Chars
(y'a pas de releaseArray pour des objets car c'est géré par le garbage collector)
D'accord, alors je comprends pas trop, c'est strange.
dans ma VM à moi ça marche et ça devrait pas poser de problème.
Bug de la jni? (flemme d'aller chercher les sources d'openjdk)
Pen^2 Le 15/06/2009 à 17:16 Peut-être que le problème se situe ailleurs, je vais essayer avec une méthode qui utilise uniquement des types primitifs en paramètre.
Sinon j'avais lu qu'on n'avait rien à libérer arpès un jniEnv->NewStringUTF(""), tu confirmes qu'il faut bien libérer avec un ReleaseStringUTFChars() ?
oui on a besoin, les strings obtenues par NewString ne sont pas gérées par le GC.