Et c'est plus propre que des variables globalescederavic a écrit :les structures ne sont pa nessecaire, mais elle simplifi beaucoup le code, et le rend par la meme occasion plus lisible/leger
Petit cadeau pour Dobro!
Bien sûr!
La variable qui est liée à la structure, (celle qui contient l'adresse), est locale.
Tu peux la rendre globale de la même façon qu'une autre:
Global Info.MaStructure
Ou bien tu peux déclarer une nouvelle variable à l'intérieur de la procédure, faire ce que tu as à faire, et passer son adresse avec ProcedureReturn
Tartempion.MaStructure
...
...
ProcedureReturn @Tartempion
Et pour récupérer les valeurs de la structure à l'exterieur de la procedure, tu fais Info.MaStructure = MaProcedure()
Chris 
La variable qui est liée à la structure, (celle qui contient l'adresse), est locale.
Tu peux la rendre globale de la même façon qu'une autre:
Global Info.MaStructure
Ou bien tu peux déclarer une nouvelle variable à l'intérieur de la procédure, faire ce que tu as à faire, et passer son adresse avec ProcedureReturn
Tartempion.MaStructure
...
...
ProcedureReturn @Tartempion
Et pour récupérer les valeurs de la structure à l'exterieur de la procedure, tu fais Info.MaStructure = MaProcedure()
Code : Tout sélectionner
Structure RESULTAT
octet.b
Mot.w
motlong.l
Chaine.s
EndStructure
Procedure MaProcedure()
Result.RESULTAT
Result\octet = #True
Result\Mot = 1234
Result\motlong = 12345678
Result\Chaine = "Hello World !"
ProcedureReturn @Result
EndProcedure
*Valeur.RESULTAT = MaProcedure()
Debug *Valeur\octet
Debug *Valeur\Mot
Debug *Valeur\motlong
Debug *Valeur\Chaine
Ah non,
Une procédure ne doit jamais renvoyer un pointeur vers une de ses variables locales.
Quand une procedure se termine, ses variables locales n'existent plus, donc la mémoire où elles se trouvaient peut être réutilisée et modifiée, notamment par les variables d'autres fonctions:
Par contre, une procedure peut prendre en paramètre un pointeur vers une structure à remplir:
Voilà 
Une procédure ne doit jamais renvoyer un pointeur vers une de ses variables locales.
Quand une procedure se termine, ses variables locales n'existent plus, donc la mémoire où elles se trouvaient peut être réutilisée et modifiée, notamment par les variables d'autres fonctions:
Code : Tout sélectionner
Structure RESULTAT
octet.b
Mot.w
motlong.l
Chaine.s
EndStructure
Procedure MaProcedure()
Result.RESULTAT
Result\octet = #True
Result\Mot = 1234
Result\motlong = 12345678
Result\Chaine = "Hello World !"
ProcedureReturn @Result
EndProcedure
Procedure metlesouk()
a=7
b=9
c.f=0.1
d$="coucou"
EndProcedure
*Valeur.RESULTAT = MaProcedure()
metlesouk()
Debug *Valeur\octet
Debug *Valeur\Mot
Debug *Valeur\motlong
Debug *Valeur\Chaine
Code : Tout sélectionner
Structure RESULTAT
octet.b
Mot.w
motlong.l
Chaine.s
EndStructure
Procedure MaProcedure(*result.resultat)
*Result\octet = #True
*Result\Mot = 1234
*Result\motlong = 12345678
*Result\Chaine = "Hello World !"
;ProcedureReturn @Result : du coup, plus besoin de retourner de valeur
EndProcedure
Procedure metlesouk()
a=7
b=9
c.f=0.1
d$="coucou"
EndProcedure
MaProcedure(@Valeur.RESULTAT)
metlesouk()
Debug Valeur\octet
Debug Valeur\Mot
Debug Valeur\motlong
Debug Valeur\Chaine
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
filperj a écrit :Ah non,![]()
Une procédure ne doit jamais renvoyer un pointeur vers une de ses variables locales.
Quand une procedure se termine, ses variables locales n'existent plus, donc la mémoire où elles se trouvaient peut être réutilisée et modifiée, notamment par les variables d'autres fonctions:
Tu as 100% raison filperj