Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[VISUAL BASIC] [DÉFINITIONS] BYREF , BYVAL


Information sur le tutorial

Catégorie :Tutoriaux Date de création : 11/12/2002 01:29:18 Vu : 11 138 fois

Note :
5,67 / 10 - par 6 personnes
5,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Tutorial

Il s'agit simplement de la méthode de passage de paramètres à vos fonctions. Toutefois celà est surtout utilisé dans la déclaration d'API (Application Programming Inteface) , ces fonctions utilisées pour intéragir avec système votre d'exploitation.

Ex d'une api rarement utile en VB (:

Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

Pour les débutants je vais vous expliquer tout les termes un
Public => cette fonction sera accessible dans toute l'application

Declare => Signifie que cette fonction est définie dans un fichier Externe (ici : user32.dll)

Function => La déclaration est une fonction (çà renvoit donc une valeur)

Lib=>Le fichier est une librairie (oui j'ai fait des études)

Alias=>Nom d'externalisation de la fonction dans la DLL

Ce qui nous interresse :
ByVal => Cela signifie que l'on passe notre argument par 'valeur' , c'est à dire que la fonction appelée ne travaillera pas directement sur la variable que tu lui passes en paramètre mais sur un clone de celle-ci.
Cela signifie que si le cas écheant la variable est modifiée par la fonction de la DLL ,cela n'aura pas de repercussion sur la variable originale de votre programme.

ByRef=> Ce coup-ci la variable est passée par Référence.
La fonction appelée par l'api reçoit l'adresse de la variable utilisée dans le programme (un genre de pointeur en C pour ceux qui connaissent). Par conséquence si la fonction modifie la variable elle sera aussi modifiée dans le programme si tu la réutilises.

Pas la peine de spécifier que le as Long et le type de la valeur retournée par la fonction (API).

P.S : ByRef est l'accès par défaut si ByVal ou ByRef n'est pas spécifié !)


::TheS@ib::
signaler à un administrateur
Commentaire de Lucyberad le 01/06/2005 12:21:48

merci, moi qui suit debutant j'avais deja tout compris tout seul sauf le byval et byref
merci pour ce petit tutoriel qui rempli bien sa fonction: expliquer byval et byref.
Le tout est bien présenté, il n'y as pas de surperflu abusif (chercher pas a comprendre si vous comprenez pas ma derniere remarque ^^).

@+
lucyberad

signaler à un administrateur
Commentaire de ShareVB le 28/06/2005 16:09:26

salut,

une nuance à apporter sur Byval et ByRef pour les types Objets (Object et autres interfaces) et le type String. Ces types sont des types pointeurs de façon native.

Donc
-> Byval As Object veut dire que l'on passe l'adresse de l'objet. On pourra accéder librement à l'objet mais pas faire un Set.
-> ByRef As Object veut dire que l'on passe l'adresse du pointeur qui pointe l'objet. C'est à dire que peut faire un Set pour modifier la référence de l'objet (par exemple utile pour l'api CoCreateInstance)
-> ByVal As String, ca veut dire que l'on passe l'adresse de la chaine. On peut donc modifier sont contenu mais pas la redimensionné. Utilise pour les appels d'Apis avec buffer chaine
-> ByRef As String, ca veut dire que l'on passe l'adresse du pointeur qui pointe la chaine. On peut donc la réallouer (avec = simplement) à sa guise.

Noter en fin que les types Structure (Type) et tableaux ne peuvent pas être passés par valeur. Ils forcement ByRef.

ShareVB

signaler à un administrateur
Commentaire de blinix123 le 08/04/2006 01:00:46

Oui voilou, byval ca ne modifie pas on travail sur un clone, et byref on travail sur le réel donc on le modifiera

signaler à un administrateur
Commentaire de ShareVB le 10/04/2006 18:30:38

salut,

sauf pour les objets pour lesquels le Byval permet de modifier le contenu de l'objet par ses méthodes mais pas de faire un New et le Byref autorise à la fois de modifier le contenu de l'objet et sa référence donc par exemple de faire un New...

ShareVB

signaler à un administrateur
Commentaire de guilhemmartincpp le 04/07/2007 19:14:47

Merci pour ce petit tuto qui va me servir pour un script VBS.
Jusqu'à présent je nommais la variable du même nom que la fonction pour récupérer la valeur par exemple :
Function Deg2Rad(ByVal x)
    Deg2Rad = x * CST_PI / 180
End Function

Mais dans la nouvelle fonction que je développe, j'ai besoin de récupérer 2 valeurs... donc je vais avoir besoin du ByRef...

signaler à un administrateur
Commentaire de donuts le 09/11/2007 12:16:10

"La fonction appelée par l'api reçoit l'adresse de la variable utilisée dans le programme (un genre de pointeur en C pour ceux qui connaissent). Par conséquence si la fonction modifie la variable elle sera aussi modifiée dans le programme si tu la réutilises."

Ca ne fonctionne pas comme un pointeur en C++, ce n'est pas la même adresse mémoire qui est utilisé par la variable dans la fonction, même passé par référence elle reste un clone qui est mise a jour en sortie de fonction.

c'est facilement vérifiable en lançant simultanément deux fonction avec la même variable passée par référence : les changements effectués sur la variable dans une des fonctions n'impacteront pas la valeur de la variable dans l'autre fonction.

D'ailleurs si quelqu'un voulait expliquer précisément le vrai mode de fonctionnement de la déclaration par référence dans Visual basique ça serait bien sympathique.

signaler à un administrateur
Commentaire de donuts le 09/11/2007 12:16:51

"La fonction appelée par l'api reçoit l'adresse de la variable utilisée dans le programme (un genre de pointeur en C pour ceux qui connaissent). Par conséquence si la fonction modifie la variable elle sera aussi modifiée dans le programme si tu la réutilises."

Ca ne fonctionne pas comme un pointeur en C++, ce n'est pas la même adresse mémoire qui est utilisé par la variable dans la fonction, même passé par référence elle reste un clone qui est mise a jour en sortie de fonction.

c'est facilement vérifiable en lançant simultanément deux fonction avec la même variable passée par référence : les changements effectués sur la variable dans une des fonctions n'impacteront pas la valeur de la variable dans l'autre fonction.

D'ailleurs si quelqu'un voulait expliquer précisément le vrai mode de fonctionnement de la déclaration par référence dans Visual basique ça serait bien sympathique.

signaler à un administrateur
Commentaire de donuts le 09/11/2007 12:17:29

"La fonction appelée par l'api reçoit l'adresse de la variable utilisée dans le programme (un genre de pointeur en C pour ceux qui connaissent). Par conséquence si la fonction modifie la variable elle sera aussi modifiée dans le programme si tu la réutilises."

Ca ne fonctionne pas comme un pointeur en C++, ce n'est pas la même adresse mémoire qui est utilisé par la variable dans la fonction, même passé par référence elle reste un clone qui est mise a jour en sortie de fonction.

c'est facilement vérifiable en lançant simultanément deux fonction avec la même variable passée par référence : les changements effectués sur la variable dans une des fonctions n'impacteront pas la valeur de la variable dans l'autre fonction.

D'ailleurs si quelqu'un voulait expliquer précisément le vrai mode de fonctionnement de la déclaration par référence dans Visual basique ça serait bien sympathique.

signaler à un administrateur
Commentaire de donuts le 09/11/2007 12:18:15

"La fonction appelée par l'api reçoit l'adresse de la variable utilisée dans le programme (un genre de pointeur en C pour ceux qui connaissent). Par conséquence si la fonction modifie la variable elle sera aussi modifiée dans le programme si tu la réutilises."

Ca ne fonctionne pas comme un pointeur en C++, ce n'est pas la même adresse mémoire qui est utilisé par la variable dans la fonction, même passé par référence elle reste un clone qui est mise a jour en sortie de fonction.

c'est facilement vérifiable en lançant simultanément deux fonction avec la même variable passée par référence : les changements effectués sur la variable dans une des fonctions n'impacteront pas la valeur de la variable dans l'autre fonction.

D'ailleurs si quelqu'un voulait expliquer précisément le vrai mode de fonctionnement de la déclaration par référence dans Visual basique ça serait bien sympathique.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,14 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.