Page 1 sur 4
Envoyer une chaine en référence
Publié : sam. 22/mars/2014 11:12
par bombseb
Bonjour,
Je désirerais envoyer une chaine de caractère en reference à une procédure, suis-je obligé de passer par une structure ?
Parceque si je fait ca :
Et bien ca ne marche pas....
D'ailleurs, j'en profite pour poser une question : Pour envoyer un paramètre par référence, il n'y a pas plus simple que d'envoyer l'adresse de la variable ? Il n'y a pas un mot clef "ref" ou un truc comme ca ?
Merci d'avance
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 11:20
par falsam
Un petit bout de code peut etre pour voir comment tu stockes ta variable ?
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 11:27
par bombseb
Arf je viens de modifier mon prog comme ca (et ca marche) :
Code : Tout sélectionner
Structure strChaine
Chaine$
EndStructure
Global Chaine.strChaine
Procedure.a incLettre (*str.strChaine)
*str\Chaine$ = "toto"
EndProcedure
sinon j'avais fait un truc comme ca (de mémoire) :
Code : Tout sélectionner
Procedure.a incLettre (*prout.s)
*prout\s = "toto"
EndProcedure
Il me disait "Native types can't be used by pointers"
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 11:33
par falsam
Les pointeurs ne peuvent pas, ou plutôt ne peuvent plus être typés
PS : je pense que ça devait être un bug auparavant de typer un pointeur.
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 11:36
par bombseb
ok d'acc
Sinon, est-ce que tu sais s'il est prévu dans une futur version de PB d'ajouter un mot clef "ref" pour pouvoir envoyer n'importe qu'elle variable en référence ?
Je suis tombé sur un post de 2004 de Fred qui disait que c'était prévu...
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 11:41
par nico
T'avais une erreur du compilateur car tu n'a pas assigné de structure, c'est comme cela:
Code : Tout sélectionner
Procedure.a incLettre (*prout.String)
*prout\s = "toto"
EndProcedure
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 11:43
par nico
ajouter un mot clef "ref" pour pouvoir envoyer n'importe qu'elle variable en référence
Ben c'est @ qui permet d'envoyer l'adresse, c'est pas compliqué sauf exeption.
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 11:45
par bombseb
ah oui alors là je ne comprend plus....
Je croyait que .s ca voulais dire "string" justement, je pensais que c'était la même chose
Effectivement avec .String ca marche...
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 11:47
par falsam
Avec ce que tu as fais ça fonctionne non ? Si on compléte ton code
Code : Tout sélectionner
Structure strChaine
Chaine$
EndStructure
Global Chaine.strChaine
Procedure.a incLettre (*str.strChaine)
*str\Chaine$ = "toto"
EndProcedure
Chaine\Chaine$ = "titi"
incLettre(Chaine)
Debug chaine\Chaine$
Aprés traitement de ton pointeur, la valeur de chaine passe bien de "titi" à "toto"
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 11:51
par bombseb
Ouioui ca marche bien avec ce que j'avais fait, mais c'est plus simple comme tu m'a dit avec .String dans la déclaration de la procédure
Je trouvais ca dommage de passer par une structure juste pour une variable
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 11:57
par falsam
Effectivement si c'était juste pour passer UN seul string tu n'avais pas besoin de structure.
Code : Tout sélectionner
Procedure.s incLettre(buffer.s)
Debug buffer
EndProcedure
inclettre("toto")
ou
Code : Tout sélectionner
monstring.s = "toto"
Procedure.s incLettre(buffer.s)
Debug buffer
EndProcedure
inclettre(monstring)
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 12:02
par bombseb
Oui mais là dans ces deux exemples tu ne passe pas la variable par référence...

Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 12:32
par falsam
bombseb a écrit :Oui mais là dans ces deux exemples tu ne passe pas la variable par référence...

Tu as raison je me moquais

mais je vais quand même faire mon Noob car je comprend mal le "by reference"
Ce code ne correspond pas à un passage de variable par référence ?
Code : Tout sélectionner
Procedure.s incLettre(*Buffer)
PokeS(*Buffer, "toto")
EndProcedure
Monstring.s = "titi"
incLettre(@Monstring)
Debug Monstring
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 12:37
par bombseb
Heu...si pourquoi ??
Je voulais juste le faire proprement, je croyais qu'il y avait peut être un mot clef "ref" comme en C#....
Question : du coup, c'est quoi la différence entre .String et .s ?
Re: Envoyer une chaine en référence
Publié : sam. 22/mars/2014 13:10
par falsam
bombseb a écrit :Je voulais juste le faire proprement
Elle est malpropre ma procédure ? Hahaha
Quand à ta question je vais laisser les pro du pourquoi faire simple quand on peut faire compliqué y répondre
Tout ce que je peux te dire c'est que buffer.
s correspond bien à une variable alphanumérique.
■ je suis perplexe devant cette manière de faire !
Code : Tout sélectionner
Procedure Dummy(*Buffer.Integer)
*Buffer\i = 2
EndProcedure
buffer=0
Dummy(@Buffer)
Debug Buffer
et
Code : Tout sélectionner
Procedure.s Dummy(*Buffer.String)
PokeS(*Buffer, "toto")
EndProcedure
Buffer.s="titi"
Dummy(@Buffer)
Debug Buffer
Je trouve ça assez obscur e