Ca me paraissait tout bête mais ça ne passe pas.
Est-ce parce qu'on ne peut passer un type strucure en argument d'une Procédure ???
Si oui comment ruser ?
En vous remerciant messieurs dames et à vot' bon coeur !
Structure Machin
Truc.l
Bidule.l
EndStructure
Procedure Chose(Mem.l)
CopyMemory(Mem, @Temp.Machin, SizeOf(Machin)) ; On copie le contenu dans une variable temporaire
Temp\Truc = 14 ; On édite
CopyMemory(@Temp.Machin, Mem, SizeOf(Machin)) ; on replace dans la structure d'origine
EndProcedure
; On crée la variable avec une structure
Bignou.Machin
; On la rempli
Bignou\Truc = 5
Bignou\Bidule = 12
; On lance la procedure en lui donnant en param l'adresse mémoire la variable
Chose(@Bignou)
Debug Bignou\Truc
on doit pouvoir faire avec des pointer aussi mais moi et les pointeur, c'est pas encore ça.
si quelqu'un peut faire un exemple, ça m'intéresse également
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Les arguments passés à une procédure ont une taille de 1, 2 ou 4 octets (.b, .w, .l, .f et pointeurs).
Pour les strings ou les variables structurées, on doit également passer une variable sur 4 octets mais en général ces 2 types ne tiennet pas sur 4 octets. Une chaine variant de contenu souvent, il n'y a que son adresse qui reste fixe, cette adresse tient sur 4 octets (un long). Dans le cas d'une string, PB passe automatiquement l'adresse de la chaine (qui reste fixe) mais pas dans le cas d'un variable structurée.
Tu dois passer un pointeur (voir exemple de Nico). Le pointeur reçoit l'adresse du début de la structure et comme c'est un pointeur sur une structure, ont peut acceder aux élémentx de la structure à l'aide du pointeur.
Dernière modification par Anonyme2 le sam. 09/oct./2004 12:31, modifié 1 fois.
Lorsqu'on passe des arguments à une procédure, la procédure fait une copie locale.
Et comme il n'est pas possible de faire: valeur1.test=valeur2.test
On ne peut pas passer une variable structurelle à une autre donc on ne peut pas le faire non plus avec une procédure.