Menú

Mostrar Mensajes

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ú

Mensajes - BlackZeroX

#1391
.
Mr. Frogs realizo un codigo excelente donde jugaba con el tipo de una variable y la convirtio de manera inteligente jugando con los punteros.

Dulces Lunas!¡.
.
#1392
.
Quisas ayuden estos....

Cls
Ctl

En ambos se hace una sub-clasificacion pero hara eso se debe obtener el puntero a la función... pero bueno hay esta el código, igual ayuda en algo.

por otro lado un tienes la funcion CallByname de vb6 y tambien tienes la libreria TLI.

Dulces Lunas!¡.
#1393
Si, de hecho lo tenia co Not(Not array) en todo caso prefiero ya hacerlo bien xP evitando el uso de not para estas cosas... al igual que LSet y otras cosillas que en proyectos medianos a grandes me han dado problemas

P.D.:

Código (Vb) [Seleccionar]



Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Any, ByVal Source As Any, ByVal Length As Long)
Private Declare Function VarPtrA Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long

Private Function ItsArrayIni(ByVal lngPtr As Long, Optional LnBytes As Long = 4) As Boolean
Dim lng_PtrSA                   As Long
    If lngPtr <> 0 And LnBytes > 0 Then
        Call CopyMemory(ByVal VarPtr(lng_PtrSA), ByVal lngPtr, LnBytes)
        ItsArrayIni = Not lng_PtrSA = 0
    End If
End Function

Private Sub Form_Load()
Dim aVar() As Integer
    MsgBox ItsArrayIni(VarPtrA(aVar()))
    ReDim aVar(0 To 10)
    MsgBox ItsArrayIni(VarPtrA(aVar()))
    Erase aVar()
    MsgBox ItsArrayIni(VarPtrA(aVar()))
End Sub



Dulces Lunas!¡.
#1394
.
No les recomiedno usar Not para ver si esta inicializada la variable , en codigos largos y complejos causa errores muy desagradables es por eso que le di el codigo de CopyMemory.

Edito------>

Cita de: Mr.Frog™ en 29 Abril 2011, 21:25 PM

Es la forma más rápida, en el IDE puede dar problemas pero compilado funciona 100%.
Para prevenir el bug en el IDE haz:


Extraño a mi con mi ctl  ListViewEx compilado o no, me dio bastantes errores... que se solucionaban separando un monton de variables, haciendo los cats, reduciendo operaciones uff... muchos errores.

El error exacto era:

Expresión Demasiado compleja


@seba123neo

En esa liga, el código que esta ( el que publiscaste ) es bueno pero hace demasiadas cosas ya que un array dinámico NULO (sin dimensiones) es un apuntador de 4 bytes ( aqrquitectura 32bytes lo digo solo como dato general ) del mismo apuntando a la estructura SafeArray dado que si no existe ( puntero NULO ) es que no esta inicializado el array, en caso contrario se apuntaría al SafeArray y simplemente usaríamos Ubound() y Lbound() que es lo mismo que en aquel código de la liga otorgas pero el caso no es saber las dimensiones ni los estados si no mas bien saber si esta inicializado o no el array o mejor dicho saber si ya hay memoria reservada para el mismo.

* Los array con declaración estática no apuntan al safearray de echo el puntero de la variable es a esta estructura...

Código (cpp) [Seleccionar]


typedef struct FARSTRUCT tagSAFEARRAY {
   unsigned short cDims;       // Count of dimensions in this array.
   unsigned short fFeatures;   // Flags used by the SafeArray
                        // routines documented below.
#if defined(WIN32)
   unsigned long cbElements;   // Size of an element of the array.
                        // Does not include size of
                        // pointed-to data.
   unsigned long cLocks;      // Number of times the array has been
                        // locked without corresponding unlock.
#else
   unsigned short cbElements;
   unsigned short cLocks;
   unsigned long handle;      // Used on Macintosh only.
#endif
   void HUGEP* pvData;             // Pointer to the data.
   SAFEARRAYBOUND rgsabound[1];      // One bound for each dimension.
} SAFEARRAY;



.. en todo caso lo que importa es solo saber si ya tiene memoria reservada (Inicializado)... pero bueno. Mas Info SafeArray.

Temibles Lunas!¡.
#1395
Código (vb) [Seleccionar]


Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Any, ByVal Source As Any, ByVal Length As Long)
Private Declare Function VarPtrA Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long

Private Function ItsArrayIni(ByVal lngPtr As Long, Optional LnBytes As Long = 4) As Boolean
Dim lng_PtrSA                   As Long
    If lngPtr <> 0 And LnBytes > 0 Then
        Call CopyMemory(ByVal VarPtr(lng_PtrSA), ByVal lngPtr, LnBytes)
        ItsArrayIni = Not lng_PtrSA = 0
    End If
End Function

'//uso:

if (ItsArrayIni(VarPtrA(iArray()))) then
' Haz algo...
end if


Temibles Lunas!¡.
#1396
.
En mi opinión la detección esta en la dll a inyectar no e el inyector... aun que igual quien sabe si es ilegal pásate a Diseño y Análisis de Malware.

P.D.: Revisa la pagina de MazarD hay veras algunas cosas referentes a esto si no mal recuerdo.

Dulces Lunas!¡.
#1397
.
Se a lo que te refieres, pero de manera en la que te di un tip es decisión tuya tomarla/manipularla/moldearla al gusto, igual lo que haces se te hace facil pero es mas laborioso en la forma practica aun que ahorita no lo sientas asi cuando quieras editar el programa uff te daras topes, ademas u protocolo que sea moldeable no solo servira con archivos puede servir para un key logger remoto, envió de cualquier tipo de información bueno vaya es mas dinamico y su código es mas re-utilizable, es decir que tu codigo puede reutilizr ese protocolo con números que indican algo a el servidor o al cliente y por medio de los mismo saber que se esta haciendo (Select Case), asi da igual que tengas 10, 20 30 o 1000 acciones distintas...

por utimo tu problema de los sockets se resuelve con esto que te menciono, ya que si sigues haciendo eso digamos que dentro del archivo esta la palabra "teclas" y esa palabra es reservada de alguna manera en tu programa para idenficar los datos respectivos, vaya que dilema no?, Solución un protocolo dinamico...

P.D.: Mo tomes una solucion apra algo en espesifico moldeala para varios casos no le cierres las expanciones posibles, si tomas la desicion de hacer el protocolo te recomiendo antes agarrar una hoja de papel y escribir hay cada parabra o comando reservado y su forma de la manera mas reducida moldeable y adaptable posible, tomando en consideracion casos nulos y Medios ( parametros completos o medios con en el ejemplo anterior ).

Dulces Lunas!¡.
#1398
.
No te recomiendo que lo hagas de esa manera es poco optimo mejor create un protocolo Ej:

Peticion de envio:  SendData <Argumentos>   El servidor debera responde con el mismo mensaje solo que con un true o false segun el caso si es true pasa a mandar el cliente el siguiente comando que serian:
Recepcion de Datos: InfoData <Argumentos> donde argumentos contiene TODA la informacion nesesaria por ejemplo el nombre del archivo, Peso del archivo.
y cuando termine de enviar los datos el servidor que es quien en ese momento esta contando los bytes cuando llegue a el ultimo envie el:
ReportData <Argumentos> donde argumentos es un reporte general y detallo de lo que se recivio.

Ejemplo del flujo:



//Suponiendo el flujo normal de transicion:
Cliente: SendData // si se manda el mensaje vacio es solo para verificar estatus...
Servidor: SendData True
Cliente: InfoData Archivo.exe|102400|c:\|filenew.exe|30
Servidor: SendData true
Cliente: manda todos los bytes de manera Compulsiva hasta que termina..
Servidor: Contara los bytes cuando llegue a 102400 segun lo que el cliente a dicho que enviara con el comando InfoData o que haya un retardo de 30 segundos que no se envien datos terminara de resivir los bytes y procedera a el siguiente comando:
Servidor: ReportData c:\|filenew.exe|102400
//Termina.





//Suponiendo que el servidor no permite la resepcion de transferencias:
Cliente: SendData // si se manda el mensaje vacio es solo para verificar estatus...
Servidor: SendData False
//Termina.





//Otro caso peculiar de este protocolo seria que terminara hasta aqui:
//Suponiendo el flujo normal de transicion:
Cliente: SendData // si se manda el mensaje vacio es solo para verificar estatus...
Servidor: SendData True
Cliente: InfoData Archivo.exe|102400|c:\|filenew.exe|30
Servidor: SendData false //si no hubiera espacio en disco, ya existe el archivo, claro este deberia ser mejor con algun numero que representara el estado por el cual no a seguido en lugar de un true y false ( 0 = Ok, 1=Archivoexistente, 2=Espacio en disco insuficiente, etc... )
//Termina.



SDe esta manera tu programa sera maleable y adaptable a un standart en tu programa y no a algo muy lineal... un ejemplo de esto es que mas o menos haci trabaja el protocolo HTTP 1.1 claro es mas complejo pero es similar.

Temibles Lunas!¡.
#1399

Código (vb) [Seleccionar]


Sub main()
Dim lV&
Dim iV%
Dim cV@
Dim dV#
Dim smsg$
    smsg = "Aun que el tema era la declaración de de las variables mas no la utilización, estuvo bien." & vbCrLf & _
           "Aun que no dice que no lo recomienda, solo que son descontinuados dichos sufijos aun es casi lo mismo de alguna manera..."
    MsgBox smsg
    MsgBox TypeName(0&) & vbCrLf & _
           TypeName(0) & vbCrLf & _
           TypeName(0@) & vbCrLf & _
           TypeName(0#)
    MsgBox "Aun asi los sufijos yo en lo personal los uso como un   Cast   en vb6 aun que claro esta que existen las funciones espesificas para esto... aun que es cuestión de opiniones ¿o No?" & vbCrLf & _
           vbCrLf & _
           TypeName(0 + (iV + lV)) & vbCrLf & _
           TypeName(0# + (iV + lV)) & vbCrLf & _
           TypeName(0@ + (iV + lV))
End Sub



Temibles Lunas!¡.
-