Page 1 sur 1
Retour des API windows
Publié : mar. 06/sept./2005 0:14
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:
Je récupère la chose en faisant:
Je voudrais être certain que je dois bien libérer ce buffer
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

Publié : mar. 06/sept./2005 8:09
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...

Publié : mar. 06/sept./2005 9:18
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(...)" ??

Publié : mar. 06/sept./2005 9:22
par LeCyb
Merci Flype :p
Dobro, c'est juste pour que ma fonction soit thread-safe.
Publié : mar. 06/sept./2005 11:47
par lionel_om
Bah pourquoi pas res = ... ou *res.b = ...
???
Ca me parait plus logique

Publié : mar. 06/sept./2005 21:50
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.
Publié : mer. 07/sept./2005 9:58
par Dr. Dri
et pk pas *res.Bytes ?
Dri
Publié : mer. 07/sept./2005 12:28
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
Publié : mer. 07/sept./2005 12:55
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
