Seth77
Messages postés572Date d'inscriptionmardi 30 avril 2002StatutMembreDernière intervention 4 mai 2020
-
23 avril 2005 à 21:25
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 2019
-
24 avril 2005 à 12:32
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 23 avril 2005 à 22:40
pour une procédure interne:
ByRef variable c'est l'adresse de variable, qui est donc directement modifiable parce qu'on connait son adresse
ByVal variable c'est l'adresse d'une copie temporaire de la variable qui elle ne sera plus modifiable
pour une procédure externe:
ByRef variable c'est l'adresse de variable, qui est donc directement modifiable parce qu'on connait son adresse
ByVal variable c'est le contenu qui se trouve à l'adresse pointée par variable (qui peut être aussi une adresse, qui elle sera modifiable)
cas particulier des chaînes:
- elles sont toujours clonées
- elles sont toujours modifiables
- ByRef est un pointeur sur la chaîne VarPtr()
- ByVal est l'adresse de la chaîne StrPtr()
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 23 avril 2005 à 23:31
ByRref c'est par défaut, quand on met rien c'est Byref (VB6)
pour une procédure interne, mettre ByVal c'est une sécurité, ainsi la procédure ne pourra jamais modifier ta variable.
(cas particulier: même avec ByRef, si tu mets une constante au lieu d'une variable, bien sûr celle ci ne sera jamais modifiée puisque c'est une copie temporaire)
pour une procédure externe, on n'a pas beaucoup le choix, il faut donner les paramètres demandés sinon plantage assuré, mais on peut parfois jouer avec les pointeurs et par exemple envoyer ByVal pointeur sur l'adresse au lieu d'envoyer l'adresse directe.
pour les chaînes c'est spécial parce que les API's demandent des chaînes en ASCII et non en Unicode (sauf quelques rares exeptions), c'est pourquoi VB est obligé de les convertir avant de les envoyer et il le fait dans les deux sens.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 24 avril 2005 à 00:02
Vb c'est tout récent , moins d'un an en fait.
"pisseur de lignes" c'était parce qu'il fallait saisir son code sur des feuilles spéciales et ensuite les donner à la saisie, et puis recevoir son bac de cartes.
t'as connu ça les cartes 80 colonnes ?
il fallait les trier, les passer à la compil pour enfin avoir son listing d'erreur.
que de changements depuis et quelles facilités maintenant, c'est un plaisir de programmer.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 24 avril 2005 à 00:20
tout ton programme était codé sur des cartes 80 colonnes, peut être ça rappellera des souvenirs à ceux qui ont connu la P80 ?
au lieu d'avoir ton écran devant toi, t'avais ton bac de 2000 cartes devant toi, ton crayon et ton listing.
quand on a l'habitude de programmer on se met plus facilement à un nouveau langage, le support change met la logique reste toujours la même, ensuite c'est une question de pratique pour connaître les particularités du langage.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 24 avril 2005 à 01:48
Salut
Comme d'hab, 30 sec de recherche sur le site pour trouver la soluce sans réveiller tout le monde http://www.vbfrance.com/code.aspx?id=7081 Vous ètes féniant ou quoi ? je comprends pas
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 24 avril 2005 à 11:02
Salut ;O)
Comme dit précédemment, VB6 passe ses paramètres par référence si l'on ne lui demande pas le contraire. Donc la procédure ne reçoit pas une copie de la variable en paramètre mais son adresse mémoire afin de la manipuler directement. On pourrait se demander pourquoi Microsoft a appliqué ce procédé, car comme tout bon programmeur le sait, le passage par valeur est le plus souvent utilisé.
Aussi, si l'on ne prend pas garde à cela, il se peut que le résultat retourné par une fonction et/ou procédure soit complétement biaisé à cause de ce passage par référence par défaut.
Il faudrait mettre un ByVal dans tout sous-programme ne demadnant pas un passage par référence. Ce serait plus logique et plus propre et cela éviterait, dans certaisn cas, des erreurs difficiles à trouver pour un débutant.
Faut-il aussi souligner qu'il ne faut pas être un pro de VB6 pour savoir ce qu'est un passage par référence et par valeur. C'est le fondement de tout appel de procédure en programmation. Tout informaticien (en devenir ou déjà diplômé) devrait connaître cela.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 24 avril 2005 à 11:45
merci les gars.
puisque vous avez l'air d'en savoir plus, vous allez peut-être pouvoir m'expliquer comment est passée l'adresse d'un tableau de chaînes de longueur fixe avec et sans ByVal ?