Sujets variés concernant le développement en PureBasic
LeCyb
Messages : 273 Inscription : dim. 26/déc./2004 20:49
Message
par LeCyb » mar. 06/sept./2005 0:14
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
Vive le thread-safe !
Flype
Messages : 2431 Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes
Message
par Flype » mar. 06/sept./2005 8:09
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...
Backup
Messages : 14526 Inscription : lun. 26/avr./2004 0:40
Message
par Backup » mar. 06/sept./2005 9:18
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(...)" ??
LeCyb
Messages : 273 Inscription : dim. 26/déc./2004 20:49
Message
par LeCyb » mar. 06/sept./2005 9:22
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 » mar. 06/sept./2005 11:47
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 » mar. 06/sept./2005 21:50
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 » mer. 07/sept./2005 9:58
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 » mer. 07/sept./2005 12:28
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 » mer. 07/sept./2005 12:55
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