VB6 >>>>>>>>>> VB.NET

このエントリーをはてなブックマークに追加
263デフォルトの名無しさん
VB6までのStringのByVal渡しは、深いコピーになる。
自信がなくてExcel 2003 VBA6で試してみたが確かにそうだ。
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)

Sub f(ByVal s As String)
    s = "bar"
'    Call MoveMemory(StrPtr(s), StrPtr("bar"), 6)
End Sub

Sub Test()
    Dim s As String
    s = "foo"
    f s
    MsgBox s
End Sub
262が指摘しているとおり、Declareで呼び出すときはまた別なので注意。