Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function VarPtrArray Lib "msvbvm50.dll" Alias "VarPtr" (Ptr() As Any) As Long
Private Type SAFEARRAYBOUND
cElements As Long
lLbound As Long
End Type
Private Type SAFEARRAY
cDims As Integer
fFeatures As Integer
cbElements As Long
cLocks As Long
pvData As Long
Bounds(0 To 0) As SAFEARRAYBOUND
End Type
Dim SA as SAFEARRAY,MyArray() As Byte
With SA
.cbElements = 1
.cDims = 1
.Bounds(0).lLbound = 0 'Lbound
.Bounds(0).cElements = 1 'Ubound
.pvData = 0 'Pointer Here
End With
CopyMemory ByVal VarPtrArray(MyArray), VarPtr(SA), 4
CopyMemory ByVal VarPtrArray(MyArray), CLng(0), 4
Эта конструкция позволяет сделать массив где угодно, только вот как выйди на адрес, где хранятся символы строки я не знаю.
Насчет интеджерового массива не понял, но все получилось так:GSerg писал(а):modSAFEARRAY в кирпичах.
Только интеджеровый массив тогда.
Dim arrMain As String
Dim arr1() As Byte
arrMain = "12345"
CreateSAFEARRAY ArrPtr(arr1), 2, StrPtr(arrMain), 1, Len(arrMain)
arr1(1) = 50
Debug.Print arrMain
DestroySAFEARRAY ArrPtr(arr1)
Antonariy писал(а):Интересно, как с этим массивом будет себя вести CopyMemory...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 102