Visual Basic 6.0 Passando pela diferença Valor de Referência
-
11-09-2019 - |
Pergunta
No código a seguir, recebo um erro de tempo de compilação porque i
é tratada como uma variante. O erro é:. "ByRef tipo de argumento incompatível"
Mas se eu passar o ByVal
parâmetros, não há erro 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
Solução
ByVal autoconverts a variante em um número inteiro, porque ele está passando um valor. Enquanto o ByRef está tentando passar uma variável que pode ser modificado nas sub-rotinas. Em essência, eu é X no cenário ByRef. não VB6 não permite que você modifique uma variante como um inteiro.
Outras dicas
Quando você Dim diversas variáveis ??em uma única linha ou seja Dim i, j as Integer
j é esmaecido como um inteiro, mas eu é uma variante. Você precisa declarar cada tipo de variável explicitamente. Eu prefiro incluir apenas uma única variável por linha.
Dim i As Integer, j As Integer
ou
Dim i As Integer
Dim j As Integer
Este é algo que eu aprendi quando eu herdei código de outro programador