Se me habia ocurrido algo casi igual hace rato cuando vi esa opcion... pero nunca para algo tan asi como lo que te rifaste... esto esta bueno!¡.
Dulces Lunas!¡.
Dulces Lunas!¡.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: Raul100 en 31 Octubre 2011, 19:24 PM
pero derepente en una funcion dependiendo de una condicion quiero devolver un puntero a una variable string por
Option Explicit
Private Declare Function VarPtrArr Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long
Private Declare Sub PutMem4 Lib "msvbvm60" (ByVal Addr As Long, ByVal NewVal As Long)
Private Declare Sub GetMem4 Lib "msvbvm60" (ByVal Addr As Long, ByVal RetVal As Long)
Public Function allocMem(ByVal lSize As Long) As Long
' // Retorna la Dirrecion de un SafeArray.
Dim pBuff() As Byte
If (lSize <= &H0) Then Exit Function
ReDim pBuff(0 To (lSize - 1))
GetMem4 VarPtrArr(pBuff), VarPtr(allocMem)
PutMem4 VarPtrArr(pBuff), 0
End Function
Public Function reallocMem(ByVal lptr As Long, ByVal lSize As Long) As Long
' // Retorna la Dirrecion de un SafeArray que se retorno en allocMem()/reallocMem().
Dim pBuff() As Byte
PutMem4 VarPtrArr(pBuff), lptr
If not (lSize = &H0) Then
ReDim Preserve pBuff(0 To (lSize - 1))
else
erase pBuff
end if
GetMem4 VarPtrArr(pBuff), VarPtr(reallocMem)
PutMem4 VarPtrArr(pBuff), 0
End Function
Public Function getMemData(ByVal lptr As Long) As Long
' // lPtr debe ser el valor (Address) que retorno en allocMem()/reallocMem().
' // Esta funcion retorna la Dirrecion de memoria EDITABLE de lPtr (Dirrecion de un SafeArray).
' // Referencias.
' // http://msdn.microsoft.com/en-us/library/aa908603.aspx
If (lptr = &H0) Then Exit Function
GetMem4 (lptr + &HC), VarPtr(getMemData) ' // obtenemos pvData
End Function
Public Sub releaseMem(ByVal lptr As Long)
' // lPtr debe ser la Dirrecion que retorno en allocMem().
Dim pBuff() As Byte
PutMem4 VarPtrArr(pBuff), lptr
End Sub
Private Sub Form_Load()
Dim lptr As Long
Dim lVal As Long
lptr = allocMem(8)
PutMem4 getMemData(lptr) + 3, 10
lptr = reallocMem(lptr, 4)
GetMem4 getMemData(lptr) + 3, VarPtr(lVal)
Call releaseMem(lptr)
Debug.Print lVal
End Sub