Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: BlackZeroX en Agosto 22, 2010, 05:35:36 pm
-
bueno tengo un problema el cual es en este codigo,
1ero copia Todos los bytes adecuadamente, posteriormente al redimencionar y volver a copiar dichos datos en algun indice superior me Crashea si se hace varias veces (Ejecuten en el IDE varias veces y verán) ¬¬"
Option Explicit
Option Base 0
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
Private Sub Form_Load()
Dim VarVariant() As Variant
Dim VarVariantDest() As Variant
ReDim VarVariant(3)
VarVariant(0) = "Miguel"
VarVariant(1) = "Angel"
VarVariant(2) = "Ortega"
VarVariant(3) = "Avila"
ReDim Preserve VarVariantDest(7)
CopyMemory ByVal VarPtr(VarVariantDest(4)), ByVal VarPtr(VarVariant(0)), 4 * 16
Debug.Print VarVariantDest(4)
Debug.Print VarVariantDest(5)
Debug.Print VarVariantDest(6)
Debug.Print VarVariantDest(7)
ReDim Preserve VarVariantDest(14)
CopyMemory ByVal VarPtr(VarVariantDest(11)), ByVal VarPtr(VarVariant(0)), 4 * 16
Debug.Print VarVariantDest(11)
Debug.Print VarVariantDest(12)
Debug.Print VarVariantDest(13)
Debug.Print VarVariantDest(14)
End Sub
Dulces Lunas!¡.
-
.
Leyendo un poco llegue a la respuesta, se los dejo por si a alguien le llegase a ocurrir algo similar!¡.
Option Explicit
Option Base 0
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function SafeArrayAccessData Lib "Oleaut32" _
(ByVal psa As Long, pvData As Long) As Long
Private Declare Function SafeArrayUnaccessData Lib "Oleaut32" _
(ByVal psa As Long) As Long
' // msvbvm60.DLL
Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" _
(Var() As Any) As Long
Private Sub Form_Load()
Dim VarVariant() As Variant
Dim VarVariantDest() As Variant
Dim psa As Long 'Pointer to SAFEARRAY
Dim hr As Long 'HRESULT
Dim pData As Long
ReDim VarVariant(3)
VarVariant(0) = "Miguel"
VarVariant(1) = "Angel"
VarVariant(2) = "Ortega"
VarVariant(3) = "Avila"
CopyMemory psa, ByVal VarPtrArray(VarVariant), 4
ReDim Preserve VarVariantDest(7)
hr = SafeArrayAccessData(psa, pData)
If hr = 0 Then
CopyMemory VarVariantDest(4), ByVal pData, 4 * 16
SafeArrayUnaccessData psa
End If
CopyMemory psa, ByVal VarPtrArray(VarVariant), 4
ReDim Preserve VarVariantDest(14)
hr = SafeArrayAccessData(psa, pData)
If hr = 0 Then
CopyMemory VarVariantDest(11), ByVal pData, 4 * 16
SafeArrayUnaccessData psa
End If
For hr = LBound(VarVariantDest) To UBound(VarVariantDest)
Debug.Print hr, VarVariantDest(hr)
Next hr
End Sub
Dulces Lunas!¡.