- Код: Выделить всё
Dim iOne As Integer
Dim iTwo As Integer
'-----------------------------------------
Private Sub test1(ByVal param As Integer)
param=param + 1
MsgBox "Inside value: " & param
End Sub
'-----------------------------------------
Private Sub test2(param As Integer)
param=param + 1
MsgBox "Inside value: " & param
End Sub
'-----------------------------------------
Private Sub Form_Load()
iOne=1
iTwo=1
End Sub
'-----------------------------------------
Private Sub cmdByVal_Click()
test1 iOne
MsgBox "Outside value: " & iOne
End Sub
'-----------------------------------------
Private Sub cmdCommon_Click()
test2 iTwo
MsgBox "Outside value: " & iTwo
End Sub
На этом примере получается, что при использованиии префикса ByVal в функцию передается лишь значение переменной, но не сама переменная. И соответственно значение переменной изменяется только внутри функции. Я прав?
Только вот недавно начал изучать winsock API, так там есть API функция для получения имени локального хоста.
Вот ее синтаксис:
- Код: Выделить всё
Public Declare Function gethostname Lib "ws2_32.dll" (ByVal host_name As String, ByVal namelen As Long) As Long
В данном случае функция меняет параметр host_name как бы возвращая результат. После этого я окончательно запутался в назначении ByVal. Как же так? В первом примере этот префикс предотвращает изменение переменной, в случае с gethostname нет.
Пожалуйста объясните ситуацию.