OVH Cloud OVH Cloud

Chaines UNICODE

2 réponses
Avatar
Olivier
Bonjour =E0 tous,
je gal=E8re un ptit peu pour faire un truc qui me paraissait =E0 la base
tout bete, enfait voil=E0 :

j'utilise une DLL en C++ qui poss=E8de une fonction ayant pour param=E8tre
une r=E9f=E9rence vers une chaine de type wchar_t.
Si j'ai bien compris, le type wchar_t correspond =E0 un tableau de
caract=E8re unicode.

Supposons que la fonction ecrite dans la DLL ressemble =E0 ca :

void TestRetourCh(wchar_t* &ch){
ch =3D L"coucou";
return;
}

Mon appel sous windev devrait ressembler =E0 ca :

sChaineretour est une cha=EEne UNICODE
API(dll,"TestRetourCh",&sChaineretour)
Info(sChaineretour)

Mais voil=E0 je me doute bien que ce n'est pas si facile! enfait, j'en
suis sur puisque, si cette technique marche avec les entiers, l=E0,
c'est un =E9chec total :)

J'ai essayer ChaineRecupere(), Transfert() et ce , sans succ=E8s, je m'y
suis peut etre mal pris..

S'agit t'il du bon type ?
Comment faire pour r=E9cup=E9rer mon wchar_t ?

A l'aide !

Merci =E0 tous
Olivier

2 réponses

Avatar
patrice
Olivier a écrit :
Bonjour à tous,
je galère un ptit peu pour faire un truc qui me paraissait à la base
tout bete, enfait voilà :

j'utilise une DLL en C++ qui possède une fonction ayant pour paramètre
une référence vers une chaine de type wchar_t.
Si j'ai bien compris, le type wchar_t correspond à un tableau de
caractère unicode.

Supposons que la fonction ecrite dans la DLL ressemble à ca :

void TestRetourCh(wchar_t* &ch){
ch = L"coucou";
return;
}

Mon appel sous windev devrait ressembler à ca :

sChaineretour est une chaîne UNICODE
API(dll,"TestRetourCh",&sChaineretour)
Info(sChaineretour)

Mais voilà je me doute bien que ce n'est pas si facile! enfait, j'en
suis sur puisque, si cette technique marche avec les entiers, là,
c'est un échec total :)

J'ai essayer ChaineRecupere(), Transfert() et ce , sans succès, je m'y
suis peut etre mal pris..

S'agit t'il du bon type ?
Comment faire pour récupérer mon wchar_t ?

A l'aide !

Merci à tous
Olivier




c'est pas le bon type, l'appel API décrit la haut correspond a
fun(char *) et non fun(char *&)

il faut passer une référence vers un pointeur et non un pointeur.


j'avoue que je connais pas la différence sur la pile entre les 2.
en tout cas, en C pure, c'est pas équivalent.
faut ptet essayer de considérer que le & est une astuce pour éviter
l'indirection.

on aurait alors :
> void TestRetourCh(wchar_t* &ch){
> ch = L"coucou";
> return;
> }
qui serait (peut être) équivalent à
void TestRetourCh(wchar_t* *ch){
(*ch) = L"coucou";
return;
}
ptet essayer :

PtrRetour est un entier sans signe sur 4 octets
API(dll,"TestRetourCh",&PtrRetour)
PtrRetour contient un pointeur vers L"COUCOU"
donc essayer un chainerecupere avec PtrRetour
Avatar
Olivier
Merci beaucoup, tu m'enlève une bonne épine du pied :)

PtrsChaineRetour est un entier sans signe sur 4 octets
API(dll,"TestRetourCh",&PtrsChaineRetour)
Info("Retour UNICODE : " +
ChaîneRécupère(PtrsChaineRetour,crAdresseUNICODE))

Ca marche comme sur des roulettes, en espèrant que ce post serve aussi
à d'autres personnes!

Merci encore
Olivier