Page 1 sur 1
Paramètres de procédure valeur de retour
Publié : jeu. 23/déc./2010 5:22
par bloiiing
Bonjour,
je fais ça:
Code : Tout sélectionner
Structure FileStruct
nom.s
taille.q
attributs.l
datemodif.l
EndStructure
Structure DirStruct
nom.s
datemodif.l
datecreate.l
List SousDossiers.DirStruct()
List Files.FileStruct()
EndStructure
Global.Dirstruct parametre
Procedure Examine( parametre.DirStruct )
code
EndProcedure
et j'ai une syntax error à la ligne Procedure Examine( parametre.DirStruct ).
Pourtant dans la doc de Procédure c'est indiqué que c'est la bonne façon d'écrire.
Autre question: On ne peut pas avoir une structure comme valeur de retour d'une procédure. Alors comment fait-on pour avoir plusieurs paramètres de retour pour une procedure?
Merci d'avance.
Re: Paramètres de procédure valeur de retour
Publié : jeu. 23/déc./2010 6:53
par venom
Bonjour,
pourquoi Procedure Examine( parametre.DirStruct )
et pas Procedure Examine(DirStruct) ???? que viens faire paramètre ?
@++
Re: Paramètres de procédure valeur de retour
Publié : jeu. 23/déc./2010 10:01
par flaith
A première vue, je mettrais plutôt :
mais c'est vraiment à première vue

(donc le global n'a rien à faire ici)
Re: Paramètres de procédure valeur de retour
Publié : jeu. 23/déc./2010 10:55
par bloiiing
Ca m'enlève l'erreur quand je met *parametre.DirStruct mais je ne comprend pas pourquoi... Car dans la doc c'est écrit qu'on peut le faire avec un parametre.l. Peut-être que c'est parce qu'il s'agit d'une structure?
En tout cas, merci de vos réponses. Ca m'a aidé.
Re: Paramètres de procédure valeur de retour
Publié : jeu. 23/déc./2010 11:00
par GeBonet
Bonjour,
Je ne sais pas si cela peut t'aider... Mais voici un bout de code qui fonctionne.
Il présente une Structure... La rend Globale et comme on le voit la structure étant globale,
pas besoin de la passer en paramètre
Il y a affichage dans la procédure ... Modification et affectation d'une variable interne "test"
qui est renvoyé elle à l'appelant dans "Reponse".
En principe tout cela existe sous forme d'exemples dans les "
Tutos" organisé et présenté par Dobro.
Code : Tout sélectionner
;
; LA structure de départ ....
;
Structure Machin ; Nom de la structure Decallage |Octeds
Nom.s ; Chaine (String) Offset = 0 (4)
Age.w ; Un mots Offset = 4 (4 bytes pour décrire Nom.s donc 0+4= 4 )| (2)
RueEtNumero.s ; Une chaine Offset = 6 (2 bytes pour Un.w donc 4+2= 6 )| (4)
CodePerso.Q ; Un quad Offset = 10 (4 bytes pour RueEtNumero donc 6+4=10 )| (8)
CodePostal.l ; EntierLong Offset = 18 (8 bytes pour un Quad donc 10+8=18 )| (4)
Localite.s ; Chaine (String) Offset = 22 (4 Bytes pour un entier long ==> 18+4=22 )| (4)
Telephone.s ; Chaine (String) Offset = 26 (4 Bytes pour une chaine donc 22+4=26 )| (8)
SoldeCompte.d ; Un double Offset = 30 (4 Bytes pour une chaine donc 26+4=30 )| (8)
EndStructure ;------ ------------
; SizeOf(Mon.Machin) |(38)
Global Mon.Machin
Procedure Examine() ; Pas besoin de passer la structure qui est ici globale...
Debug "Dans procedure"
Debug "----------------"
Debug Mon\Nom
Debug Mon\Age.w
Debug Mon\CodePostal
Debug "----------------"
test+1
Mon\CodePostal+1000
ProcedureReturn test
EndProcedure
; ----------------------------------------
; Affectation des champs de la structure
;
Mon\Nom.s ="GeBonet Gerhard"
Mon\Age.w =65
Mon\RueEtNumero.s ="Rue de France,26"
Mon\CodePerso.Q =3366898999922221
Mon\CodePostal.l =4020
Mon\Localite.s ="Liège"
Mon\Telephone.s ="3204-nn0 mm 66"
Mon\SoldeCompte.d =1233650.3368
; -----------------------------------------
Reponse=Examine() ; Appel de la procedure
Debug Reponse ; et affiche le résultat
Debug Mon\CodePostal ; Code postal modifié ...
Debug "-------------------"
;
; On peux aussi affecter comme suit...
; dans ce cas l'assistant d'encodage entre en fonction ...
;
With Mon
\Nom="Albert"
\RueEtNumero="Rue des trois rois, 26"
\Localite="Namur"
\CodePostal=6000
EndWith
; etc...
Debug Mon\Nom
Debug Mon\Age.w
Debug Mon\CodePostal
End
Voilà, voilà... (Mon solde de compte est un peu forcé)

Re: Paramètres de procédure valeur de retour
Publié : jeu. 23/déc./2010 13:02
par Backup
GeBonet a écrit :
En principe tout cela existe sous forme d'exemples dans les "
Tutos" organisé et présenté par Dobro.
ben ouai !

Re: Paramètres de procédure valeur de retour
Publié : jeu. 23/déc./2010 16:12
par Cls
En fait quant tu fais ça
tu lui dis que tu vas lui passer une structure.
Mais quand tu fais ça
tu lui dis que tu vas lui passer l'adresse d'une structure de type DirStruct, donc en fait un ".l (long)". Ce qui est écrit dans la doc.
La nuance est très importante car dans un cas tu lui passes une copie des données (ce qui est interdit dans ton cas) et dans l'autre tu lui passes une référence (le pointeur) sur ces données.
Re: Paramètres de procédure valeur de retour
Publié : jeu. 23/déc./2010 17:44
par boddhi
De mémoire, on ne peut pas passer une variable structurée comme argument dans une procédure
Il faut utiliser un pointeur comme dans l'exemple donné par flaith :
Re: Paramètres de procédure valeur de retour
Publié : ven. 24/déc./2010 0:12
par bloiiing
Cls a écrit :En fait quant tu fais ça
tu lui dis que tu vas lui passer une structure.
Mais quand tu fais ça
tu lui dis que tu vas lui passer l'adresse d'une structure de type DirStruct, donc en fait un ".l (long)". Ce qui est écrit dans la doc.
Bien vu! Je n'avais pas fait le rapprochement entre le type long et une adresse qui est aussi de type long d'après la doc (du moins en 32 bits).
Merci bien!
Re: Paramètres de procédure valeur de retour
Publié : ven. 24/déc./2010 0:15
par bloiiing
Dobro a écrit :GeBonet a écrit :
En principe tout cela existe sous forme d'exemples dans les "
Tutos" organisé et présenté par Dobro.
ben ouai !

OK, je vais me pencher plus profondément sur les tutos...
A+