Estoy luchando por comprender el valor de paso por paso y por referencia en VB6. Entiendo estos conceptos completamente en lenguajes de programación orientados a objetos como .NET y Java (me doy cuenta de que Java no tiene acceso por referencia). Eche un vistazo al siguiente código:VB6 pase por valor y pase por referencia
Private Sub Form_Load()
Dim Test As Integer
Test = 1
TestFunction Test 'line 5
MsgBox (Test)
End Sub
Private Sub TestFunction(ByVal i As Integer)
i = i + 1
End Sub
El cuadro de mensaje imprime 1 como era de esperar. Si pongo corchetes alrededor de Prueba en la línea 5, el cuadro de mensaje imprime 1 como era de esperar. Ahora echa un vistazo en el código de abajo:
Private Sub Form_Load()
Dim Test As Integer
Test = 1
TestFunction Test 'line 5
MsgBox Test
End Sub
Private Sub TestFunction(ByRef i As Integer)
i = i + 1
End Sub
El mensaje de impresiones de la caja 2 como me esperaba. Sin embargo, si agrega corchetes a la línea 5, el cuadro de mensaje imprime 1 como no esperaba. Parece que la función de llamada puede pasar por valor incluso si la variable definida en la función llamada es ByRef. Parece que no es el caso viceversa, es decir, si la función llamada tiene una firma con una variable definida como ByVal, entonces siempre será ByVal (incluso si no hay corchetes alrededor de la variable en la función de llamada). ¿Cuál es el pensamiento detrás de esto en VB6? Me doy cuenta de que esta es una pregunta básica en VB6 pero me ha confundido. He leído la documentación de MSDN y me doy cuenta de que todo esto es cierto, sin embargo, no explica el razonamiento detrás de esto.
Gracias. Esto es útil. ¿Cuál es el propósito de la función de llamada? ¿Esto significa que la variable pasada nunca será tratada como una expresión? Estoy sorprendido por esto ya que nunca antes lo había pensado realmente. Además, si hay más de una variable para pasar, entonces supongo que no puede incluir una expresión. – w0051977
No estoy seguro de cómo se trata de un "error", ya que está documentado, el comportamiento intencional. La palabra clave Call es heredada y obsoleta, y se remonta a principios básicos de MS. Estaba allí para facilitar la migración de viejos programas hacia adelante. – Bob77
La palabra clave 'Call' no tiene ninguna relación ya sea que los argumentos se traten o no como expresiones. Simplemente usa paréntesis como la forma de pasar argumentos, por lo que un par de paréntesis tiene un significado diferente. Pero los paréntesis alrededor de un argumento producen una expresión igual que sin la palabra clave 'Call'. –