Hola, tengo una duda con CopyMemory, que no me cierra, resulta que intento copiar un tipo y un array de bits a un segundo array de bits, pero a este segundo lo redimenciono con una medida menor al que tendria que ser y funciona igual, porque??
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Type UDT
W As Long
L As Long
End Type
Dim tUdt As UDT
Dim Data() As Byte
Dim Bit() As Byte
Private Sub Form_Load()
Dim i As Integer
ReDim Bit(2)
'--------Cargo los valores
For i = 0 To 2
Bit(i) = 255
Next
tUdt.W = 2147483647
tUdt.L = 2147483647
'---------------------------
'---Reimenciono Data pero con un valor a 8 ?¿?¿?
ReDim Data(LenB(tUdt)) ' <---WTF?
'-----------------------------------------------
'------Copio los datos en Data-----------------
CopyMemory Data(0), tUdt, LenB(tUdt)
CopyMemory Data(LenB(tUdt)), Bit(0), 3
'----------------------------------------------
'---------Borro todo-----------------
For i = 0 To 2
Bit(i) = 0
Next
tUdt.W = 0
tUdt.L = 0
'-------------------------------------
'--------Recargo utilizando CopyMemory
CopyMemory tUdt, Data(0), LenB(tUdt)
CopyMemory Bit(0), Data(LenB(tUdt)), 3
'-------------------------------------
'--------------Imprimo-------------------------
Debug.Print tUdt.W, tUdt.L, Bit(0), Bit(1), Bit(2)
End Sub
como ven tUdt = 8 bits , Bit esta redimencionado en 2 por lo tanto son 3 bits, por lo tanto deberia redimencionar a Data a 10 (10 y no 11 porque Data(0) ocupa un lugar no?), entoces mi duda es ¿por qué si redimenciono a DATA( 8 ) y copio los valores igual funciona todo bien?, no tendria que explotar todo por pisar algun segmento de la memoria?