Retour des API windows

Sujets variés concernant le développement en PureBasic
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Retour des API windows

Message par LeCyb »

En utilisant les fonctions de l'API windows je voudrais avoir une petitre précision à propos des chaînes.

Quand j'ai le msdn qui me dit ceci:

Code : Tout sélectionner

char* FAR inet_ntoa(
  struct   in_addr in
);
Je récupère la chose en faisant:

Code : Tout sélectionner

*res.l = inet_ntoa(...)
Je voudrais être certain que je dois bien libérer ce buffer

Code : Tout sélectionner

FreeMemory(*res)
Si je ne libère pas je suppose que je vais avec une perte en mémoire ?
Si je libère je suppose que je ne vais pas avoir de problème ?

Merci :)
Vive le thread-safe !
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

coucou,
voir doc msdn :
The application should not make any assumptions about the way in which the memory is allocated. The data is guaranteed to be valid until the next Windows Sockets function call within the same thread—but no longer. Therefore, the data should be copied before another Windows Sockets call is made.
donc en gros, il ne faut pas libérer la chaine, c'est le winsock qui s'en charge car au prochain appel à cette fonction la chaine est libérée et réallouée. à toi de faire une copie en mémoire pour ton appli avant réallocation.
donc tout dépend de ce qui est décrit dans la doc... :wink:
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

char* FAR inet_ntoa(
struct in_addr in
);


Je récupère la chose en faisant:


*res.l = inet_ntoa(...)
heu j'y connais rien mais le "char*" ne veut t'il pas dire qu'il sagit d'un pointeur de Chaine ??

dans ce cas pourquoi avoir fait :

"*res.l = inet_ntoa(...)"

et pas

"*res.s = inet_ntoa(...)" ??





8O
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Merci Flype :p

Dobro, c'est juste pour que ma fonction soit thread-safe.
Vive le thread-safe !
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Bah pourquoi pas res = ... ou *res.b = ...
???
Ca me parait plus logique :!: :?:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Ben res.b ça va être difficile d'y placer une adresse 32 bits, un Long me semble plus judicieux.
Mettre *res me semble plus logique car en général un pointeur reçoit une adresse.
Vive le thread-safe !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

et pk pas *res.Bytes ?

Dri
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

J'ai mis *res.b

Exemple :

Code : Tout sélectionner

s.s = "Coucou"

*pt.b
*pt = @s

i = 0
While PeekB(*pt + i)
  Debug Chr(PeekB(*pt + i))
  i + 1
Wend
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

c'est normal... c'est un pointeur alors il pointe vers une adresse... il sera TOUJOURS de 32bits.

L'intéret des pointeurs en PB c'est de les utiliser avec des structures...

Dri ;)
Répondre