VB : ByRef ...

VB : ByRef ... - Programmation

Marsh Posté le 06-04-2001 à 13:24:04    

Je sais c'est tout con et si je cherchais un peu je trouverais sans mal :o...
Mais voila j'ai la flemme !!! et puis vous allez surement me repondre tres vite.
 
Byref (par défaut) : ca passe les arguments par référence c.a.d par adresse non ??? c.a.d que ca effectue pas une copie de la variable ... et qu'on travail directement sur elle ...
OK.
 
Bon alors pourquoi :
 
Sub Test(ByRef X As Integer)
    X = 10
End Sub
Private Sub BoutonTest_Click()
    Dim Var As Integer
     
    Var = 1
    Test (Var)
    MsgBox ("Avant Test : 1 - Après Test : " & Str(Var))
End Sub
 
Var reste inchangée !!!!
En C quand on passe par adresse la variable est modifiée (normal on travail directement dessus)
Et là ? C'est magique !!! Comment il fait VB ????

Reply

Marsh Posté le 06-04-2001 à 13:24:04   

Reply

Marsh Posté le 06-04-2001 à 13:39:53    

Avec ByRef var ne doit pas rester inchangé....
 
Dans ton cas pour que ça marche il faut :
 
    Dim Var As Integer  
     
    Var = 1  
    Test Var
    MsgBox ("Avant Test : 1 - Après Test : " & Str(Var))  
 
Ou :
 
    Dim Var As Integer  
     
    Var = 1  
    Call Test (Var)  
    MsgBox ("Avant Test : 1 - Après Test : " & Str(Var))  
 
 :jap:

Reply

Marsh Posté le 06-04-2001 à 13:53:00    

...
?
c'est vrai que je me suis deja heurté à ce truc ...
c'est quoi la difference alors entre :
 
Fonction parametre
Fonction(parametre)
call Fonction(parametre)   (<= je sais qu'on perd la valeur de retour ...)

Reply

Marsh Posté le 06-04-2001 à 14:33:09    

Ce n'est pas une histoire de différences.
En fait c'est une convention de VB, normalement seul Fonction parametre et call Fonction(parametre) sont authorisés. Il n'y a pratiquement aucune différence.
 
Le PB c'est que VB accepte Fonction (parametre) (sans message d'erreur) mais dans ce cas il ne modifie pas les variables passées en paramètre qu'il y ai Byref ou ByVal.
 
C'est un fonctionnement que je considère comme bizarre et surtout très dangereux si on ne fait pas attention.
 
 :jap:

Reply

Marsh Posté le 06-04-2001 à 17:33:05    

C'est clair !!!
Merci pour tes explications :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed