- Код: Выделить всё
Type T
S As String * 4
End Type
'...
Dim A(0 To 3) As Byte
Dim Var2 As T
Dim Var1 As String * 4
A(0) = &H61&
A(1) = &H62&
A(2) = &H63&
A(3) = &H64&
CopyMemory Var2, A(0), Len(Var2)
MsgBox Var2.S
CopyMemory Var1, A(0), Len(Var2)
MsgBox Var1
Первое исполнение CopyMemory пройдёт нормально и в строке окажется то, что нужно, а на 2-ом либо упадёт, либо белиберду выведет.
Где-то слышал, что к строке спереди "приклеена" информация о её размере в количестве 4-х байт. Думал дело в этом, поэтому пробовал вместо простой передачи Var1 передать указатель с учётом "приклеенной" информации: VarPtr(Var1)+4. Может чушь сделал, но, в любом случае, не помогло, да и просто передача VarPtr(Var1) тоже. В общем, использовал всё, что могло прийти в мою буйную фантазию.
Вопроса по этому поводу два:
1) Каковы причины такого поведения (собственно, отличие строки в структуре от просто переменной)?
2) Как эту проблему можно решить?