CopyMemory




Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(pvDest As Any, lpvSource As Any, _
ByVal cbCopy As Long)

'Copia una struttura Type su un array di Byte. Bisogna passare

'indirizzo della struttura Type con la funzione VarPtr() e la

'sua lunghezza calcolata con LenB().

'L'array DEVE essere vuoto per poter essere ridimensionato


Public Sub CopyTypeToBYTE(ByVal pType As Long, ArrayDest() As Byte, _
ByVal iNElements As Integer, _
Optional ByVal iBase As Integer = 0)
ReDim ArrayDest(iBase To iNElements - 1)
CopyMemory ArrayDest(iBase), ByVal pType, iNElements
End Sub

'Copia un array di Byte su una struttura Type

Public Sub CopyBYTEToType(ArraySource() As Byte, ByVal pType As Long, _
ByVal iNElements As Integer)
Dim iInizio As Integer
iInizio = LBound(ArraySource)
CopyMemory ByVal pType, ArraySource(iInizio), iNElements
End Sub

'Uso delle funzioni

Dim t As MiaStruct
Dim aByte() As Byte
t.campo1 = "Mia struct"

'Copia struttura su array

CopyTypeToByte ByVal VarPtr(t), aByte(), LenB(t)

'Copia array su struttura

CopyByteToType aByte(), ByVal VarPtr(t), LenB(t)
CopyMemory:
usare ByVal per passare indirizzi e stringhe:
i parametri sono stati dichiarati come As Any
per usare una sola funzione per tutti i tipi di dati











( copymemory.html )- by Paolo Puglisi - Modifica del 17/12/2023