Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD8] traduction code C

3 réponses
Avatar
Bertrand
hello,
j'ai un petit doute avec un appel d'une dll, livrée avec un exemple en
C...

le code est :

char* error;
char* buffer;

sips_remote_call_func(&param,pathfile,&buffer,&error);


mon doute porte sur le type de variable...

"char* error" est donc un entier correspondant à un pointeur sur une
chaine si mes souvenirs sont bons.
on balance donc dans la fonction un pointeur sur ce pointeur (le
&error)

à l'issue de la fonction, on récupère donc dans windev un pointeur sur
une chaine de type C, terminée par un zéro donc,
mais qui se trouve où ?

comment récuperer cette chaine ensuite dans une chaine Windev, sachant
que j'en ignore sa longueur (et donc ne peux pas utiliser un transfert)
?


merci
Bertrand

3 réponses

Avatar
Gégé
Bertrand a écrit :
hello,
j'ai un petit doute avec un appel d'une dll, livrée avec un exemple en C...



à l'issue de la fonction, on récupère donc dans windev un pointeur sur
une chaine de type C, terminée par un zéro donc,
mais qui se trouve où ?




Tu dois passer à ta DLL une chaîne Asciiz
Avatar
Bertrand
>
Tu dois passer à ta DLL une chaîne Asciiz



non,non la fonction attend bien un pointeur sur un pointeur sur une
chaine :)
le problème est que la chaine est instancialisée dans la dll, pas
avant.

je récupère un pointeur sur cette chaine.
en déclarant ensuite une chaine balèse et en faisant un
transfert(&chaine,monpointeur) je récupère bien ladite chaine.

mais j'en ignore la taille à priori, donc je suis obligé de faire une
déclaration importante pour ne pas risquer de perte de donnée.
ça donne donc ça actuellement :

PointeurError est un entier
PointeurBuffer est un entier

appelDll32("maDll","sips_remote_call_func",&param,pathfile,&PointeurBuffer
,&PointeurError );

error est une chaine Asciiz de 65536
buffer est une chaine Asciiz de 65536
transfert(&buffer,PointeurBuffer,65536)
transfert(&error,PointeurError ,65536)
Avatar
Gégé
Bertrand a écrit :

mais j'en ignore la taille à priori, donc je suis obligé de faire une
déclaration importante pour ne pas risquer de perte de donnée.



Bof, tu alloues deux chaînes de 64Ko