Page 1 sur 1
Syntax Error... Pourquoi tant de haine ???
Publié : sam. 09/oct./2004 11:26
par hackotedelaplaque
Bonjour à toutes et à tous !
je veux créer une procedure toute simple mais elle me renvoie un "syntax error" à la compil :
Code : Tout sélectionner
Procedure SetHorinzontalSpeed(Myvariable.Mystructure,vitesse.w)
Myvariable\x+vitesse
Endprocedure
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 !
Publié : sam. 09/oct./2004 11:44
par Le Soldat Inconnu
Il faut passer l'adresse mémoire de la structure en param.
Exemple :
Code : Tout sélectionner
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

Publié : sam. 09/oct./2004 11:49
par nico
Il faut que tu passes par un pointeur, dont voici un exemple:
Code : Tout sélectionner
Structure test
a.l
b.l
EndStructure
Procedure essai(*test.test)
*test\a=10
*test\b=11
EndProcedure
essai(@valeur.test)
Debug valeur\a
Debug valeur\b
Voilà M'sieur 
Publié : sam. 09/oct./2004 11:58
par hackotedelaplaque
Ca marche !!!!
...... mais j'ai rien compris !!!
Disons que j'appréhende vaguement le concept mais ça reste assez flou.
Et puis quelle est la différence de fond entre vos deux techniques ?
Pourquoi une structure ne serait pas un argument valide pour une fonction ?
Publié : sam. 09/oct./2004 12:03
par Anonyme2
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.
Publié : sam. 09/oct./2004 12:08
par Anonyme2
Tu peux aussi déclarer ta variable globale
Code : Tout sélectionner
Structure Mystructure
x.l
EndStructure
Global Myvariable.Mystructure
Myvariable\x = 10
Procedure essai(vitesse.w)
Myvariable\x+vitesse
EndProcedure
Debug Myvariable\x
Debug ""
essai(20)
Debug Myvariable\x
Publié : sam. 09/oct./2004 12:13
par nico
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.
Publié : sam. 09/oct./2004 18:14
par Chris
; On crée la variable avec une structure
Bignou.Machin
Délocalisé ou non, Breton il est, Breton il reste

Publié : sam. 09/oct./2004 22:24
par hackotedelaplaque
Je pense avoir bien compris maintenant, merci à tous.
Les pointeurs, ça me faisait un peu peur au début.
Mais bon je suppose que c'est comme les filles, faut désacraliser et après on peut plus sans passer ! !!
Encore merci messieurs du basic.