Page 4 sur 4

Re: Envoyer une chaine en référence

Publié : dim. 23/mars/2014 11:22
par nico
je ne comprends pas pourquoi chez toi sans le Pokes() ça fonctionne , alors que j'ai un plantage en sortie de procedure sur le Endprocedure ..... :roll:
Désolé, t'as raison ça plante, mais il est possible que cela puisse fonctionner pendant quelques essais, je viens de réessayer et un coup ça marche, un autre coup ça marche pas, d'ailleurs ça plante aussi avec le PokeS quand on fait une série de tests.

Re: Envoyer une chaine en référence

Publié : dim. 23/mars/2014 13:29
par Backup
ça ne devrai plus planter ....
puisque je prepare la variable qui reçois en lui ajoutant des espaces (space(1024))

heu ... tu lis les messages avant de repondre ?? :lol:


le principe
tu as une variable A , et une autre B

pour que B puisse s'ecrire dans A
il faut deja formater A (c'est ce que je fais avec le Space(1024 ) )

ensuite toute les opération de memoire dans la procedure, ne plantent plus :)
(a condition de ne pas depasser 1024 caracteres ... pour cet exemple )

rappel du nouveau code :

Code : Tout sélectionner



Declare.a incLettre (lettre)

calldebugger
toto$ = "A" +space(1024) ; ajout de place pour pouvoir remplir uterieurement....
debug "avant l'appel de la procedure toto ="+toto$
incLettre (@toto$)
; comme le debugger est limité en longueur de chaine , je vais utiliser message requester
;debug "Apres l'appel de la procedure toto="+toto$
MessageRequester("toto", toto$)

Procedure.a incLettre (lettre)
   
   ; Invalid memory access
   Debug  "adresse de Toto ="+str(lettre)
   Debug "contenue de Toto= "+peeks(lettre)
   ; on va changer le contenu de toto
   t$="rien ne sert de courir , il faut partir a point , je pourrai ainsi ajouter la longueur que je veux, parcequ'il n'y a pas de raison, que ça bloque , j'ai prevu de la place pour 1024 caracteres de plus ... "
   
   MoveMemory(@t$, lettre, len(t$)) ; marche car on a prevu de la place au depart !!
; du coup on peut aussi utiliser CopyMemory()
; CopyMemory(@t$, lettre, len(t$)) ;marche car j'ai prevu de la place des le debut !!
   
EndProcedure


; Epb


Re: Envoyer une chaine en référence

Publié : dim. 23/mars/2014 13:43
par nico
Oui je lis les réponses mais il me semblait important d'apporter l'explication de mes résultats.

L'exemple de ton code ne répond pas a une problématique réelle, dans ce cas, je passerais par une variable global String parce qu'à un moment faut arrêter de se faire des nœuds au cerveau. :lol:

Re: Envoyer une chaine en référence

Publié : dim. 23/mars/2014 13:47
par Backup
c'est quand meme utile ...
pour savoir comment marche les Movememory et compagnie ...


maintenant, c'est clair , qu'a partir du moment ou on ne peut pas reserver un espace memoire a la volée ..

ça limite .....

effectivement , mieux vaut passer par une variable Global ou meme une structure :)