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
5 行目の Test を括弧で囲むと、予想どおり、メッセージ ボックスに 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 のドキュメントを読みましたが、これはすべて真実であることがわかりましたが、その背後にある理由は説明されていません。