Swig C++ Tcl - remplir un buffer
Bonjour,
Je suis en train de faire quelques tests avec Swig et je bute sur un problème.
Je cherche à faire l'interfaçage entre une librairie C++ et du Tcl.
J'ai une méthode C++ à qui normalement on passe en argument un pointeur sur un buffer (alloué préalablement) et qui le rempli avec une chaine de caractère. Cette méthode me retourne le nombre de caractère qu'elle a placé dans le buffer.
Je cherche donc à l'appeler depuis le TCL. Ce qui me bloque c'est de passer le nom de la variable (pointeur sur le buffer) à la DLL et qu'elle me le remplisse.
En résumé, on a la déclaration de la méthode C++ : int Test::remplir(char* buffer, int lengthMax);
En TCL on écrirait :
Test monNouvelObjet
monNouvelObjet remplir maVariable 50
::puts $maVariable
et donc "maVariable" contiendrait par exemple "hello world from DLL"
Ce que j'ai réussi à faire c'est de passer en argument à une fonction C une chaine de caractère et que la DLL me la modifie. Or il faudrait que la chaine de caractère soit considérée comme un nom de variable.
Merci d'avance !
typemap supprime des arguments
Finalement, j'ai déclaré un typemap pour ma méthode et dedans j'ai fait appel à Tcl_SetVar et ça fonctionne correctement.
Par contre maintenant j'ai un autre souci :
le wrapper par défaut prend en compte le bon nombre d'arguments de ma méthode puisqu'il génère ceci :
Code:
if (SWIG_GetArgs(interp, objc, objv,"ooo:SERIAL_Read self cc nbc ",(void *)0,(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
Par contre dès que je déclare mon typemap, il me génère ceci :
Code:
if (SWIG_GetArgs(interp, objc, objv,"oo:SERIAL_Read self cc ?nbc? ",(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
et je ne peux plus passer l'argument "nbc" à la méthode.
J'ai déclaré mon typemap ainsi :
Code:
1 2
| %typemap(in) (char *cc, int nbc) {
} |
Est-ce qu'il manque quelque chose à mon typemap ?
Merci