Visual Basic 6.0 Pasando por diferencia de valor de referencia
-
11-09-2019 - |
Pregunta
En el siguiente código, me sale un error de tiempo de compilación porque i
se trata como una variante. El error es:. "ByRef Argumento de coincidencia de tipo"
Pero si paso el ByVal
parámetros, no hay error por qué?
Private Sub Command2_Click()
Dim i, j As Integer
i = 5
j = 7
Call Swap(i, j)
End Sub
Public Sub Swap(ByRef X As Integer, ByRef Y As Integer)
Dim tmp As Integer
tmp = X
X = Y
Y = tmp
End Sub
Solución
ByVal autoconverts la variante en un número entero, ya que está pasando a un valor. Mientras que el ByRef está tratando de pasar una variable que se puede modificar en las subrutinas. En esencia I es X en el escenario ByRef. VB6 no permite modificar una variante como un número entero.
Otros consejos
Cuando DIM varias variables en una sola línea, es decir Dim i, j as Integer
j está atenuado como un entero, pero es una variante. Es necesario que declaren cada tipo de variable de forma explícita. Yo prefiero incluir solamente una sola variable por línea.
Dim i As Integer, j As Integer
o
Dim i As Integer
Dim j As Integer
Esto es algo que aprendí cuando heredé el código de otro programador