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 |