Páginas: [1]
|
 |
|
Autor
|
Tema: como enviar struct con control winsock de vb ??? (Leído 603 veces)
|
al3
Desconectado
Mensajes: 104
|
Como envia una estrcutura con control Winsock de VB ????
|
|
|
|
|
En línea
|
|
|
|
Slasher-K
Desconectado
Mensajes: 1.480
|
Crea una cadena a partir de la estructura leyendo la memoria de la estructura. Por ejemplo: Function PackStr(lpStruct As MyStruct) As String Dim sData$, r&
sData = String$(Len(lpStruct), 0)
r = ReadProcessMemory(GetCurrentProcess(), VarPtr(lpStruct), ByVal sData, Len(sData))
PackStr = sData End Function
Saludos.
|
|
|
|
|
En línea
|
A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
|
|
|
al3
Desconectado
Mensajes: 104
|
Gracias pero no funciono: 'Modulo Public Type T_Struct nombre As String x As Long y As Long End Type
Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long Declare Function GetCurrentProcess Lib "kernel32" () As Long Declare Function VarPtrAny Lib "vb40032.dll" Alias "VarPtr" (lpObject As Any) As Long
'Form Private Sub Form_Load() Dim strA As T_Struct strA.nombre = "XXXX" strA.x = 100 strA.y = 200
tmpA = PackStr(strA) MsgBox tmpA
End Sub
Private Function PackStr(lpStruct As T_Struct) As String Dim sData$, r&
sData = String$(Len(lpStruct), 0)
'Aca aparece un Error, porque le falta el utlimo parametro 'Yo probe con varios numeros y siempre da el mismo resultado r = ReadProcessMemory(GetCurrentProcess(), VarPtr(lpStruct), ByVal sData, Len(sData), 1)
PackStr = sData End Function
|
|
|
|
|
En línea
|
|
|
|
Slasher-K
Desconectado
Mensajes: 1.480
|
Está mal la declaración de ReadProcessMemory, tiene que estar como sigue: Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, Optional lpNumberOfBytesWritten As Long = 0) As Long
El problema está en el argumento lpBaseAddress, si no lo pasamos como ByVal entonces lo que va a pasar es la dirección de retorno de la función VarPtr y no el valor que devuelve. Lo que interesa es el valor que devuelve ya que es el puntero a la estructura. Saludos.
|
|
|
|
|
En línea
|
A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
|
|
|
al3
Desconectado
Mensajes: 104
|
Me sigue sin funcionar. ¿no tenes el codigo completo?
|
|
|
|
|
En línea
|
|
|
|
Slasher-K
Desconectado
Mensajes: 1.480
|
Public Type T_Struct nombre As String x As Long y As Long End Type
Si funciona pero te copia la dirección del string y no la cadena, vas a tener que modificar un poco la función y crear otra que te vuelva a rearmar la estructura. Te dejo un ejemplo de código: Public Type T_Struct nombre As String x As Long y As Long End Type
Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, Optional lpNumberOfBytesWritten As Long = 0) As Long
Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, Optional lpNumberOfBytesWritten As Long = 0) As Long
Declare Function GetCurrentProcess Lib "kernel32" () As Long
Function PackStr(lpStruct As T_Struct) As String Dim sData$, r&
sData = String$(Len(lpStruct) - 4, 0)
'Lee a partir del registro x. ' r = ReadProcessMemory(GetCurrentProcess(), VarPtr(lpStruct) + 4, ByVal sData, Len(sData))
sData = lpStruct.nombre & vbNullChar & sData PackStr = sData End Function
Function UnpackStr(StrSpec As String) As T_Struct Dim sData$, r& Dim iPos%, lpData As T_Struct
With lpData iPos = InStr(1, StrSpec, vbNullChar) If iPos = 0 Then Exit Function .nombre = Left$(StrSpec, iPos - 1) sData = Mid$(StrSpec, iPos + 1, Len(lpData) - 4) r = WriteProcessMemory(GetCurrentProcess(), VarPtr(lpData) + 4, ByVal sData, Len(sData)) UnpackStr = lpData End With End Function
|
|
|
|
« Última modificación: 28 Abril 2005, 07:57 por Slasher Keeper »
|
En línea
|
A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
|
|
|
|
Páginas: [1]
|
|
|
|