Переписан на вот так:
- Код: Выделить всё
test 0, "", ""
- Код: Выделить всё
Private Sub test(ByVal stub As Long, t As String, s As String)
s = "траляля"
stub = VarPtr(stub)
GetMem4 stub + 8, stub + 4
MsgBox t
' Mid$(s, 1) = "шушушу"
s = "шушушу"
MsgBox t
MsgBox s
End Sub
Стало работать и после компиляции. Причём, можно уже строку менять и без mid (я так понял, это потому, что бейсик уже не может выделять другой адрес, ведь вернуть-то нужно тот же самый аргумент?
Позже: нет, не поэтому - на выходе у строк должны быть уже другие адреса, иначе внутри test их бы не удалось вычислить, прибавлением по 4. Значит, адреса у аргументов временные?)
Осталось понять, как проделать тот же фокус, но чтобы сопоставить строку не строке, а массиву байт.
Что ты хотел этим сказать?
Что просто считаю адреса переменых от адреса заглушки, прибавляя по 4.