Я изо всех сил пытаюсь понять, передать по значению и передать по ссылке в VB6. Я полностью понимаю эти концепции в объектно-ориентированных языках программирования, таких как .NET и Java (я понимаю, что Java не имеет ссылки). Посмотрите на код ниже:
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
Когда я ставлю скобки вокруг Test в строке 5, в окне сообщения выводится 1, как я и ожидал. Теперь взгляните на код ниже:
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
Окно сообщения печатает 2, как я и ожидал. Однако, если вы добавите скобки в строку 5, в окне сообщения будет напечатано 1, чего я не ожидал. Похоже, что вызывающая функция может передаваться по значению, даже если переменная, определенная в вызываемой функции, является ByRef. Похоже, что это не так, т.е. если вызываемая функция имеет сигнатуру с переменной, определенной как ByVal, то она всегда будет ByVal (даже если в вызывающей функции нет скобок вокруг переменной). Что стоит за этим в VB6? Я понимаю, что это основной вопрос в VB6, но он смутил меня. Я прочитал документацию MSDN и понял, что это все правда, однако он не объясняет причины этого.