elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 03:13  


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)  (Leído 367 veces)
EddyW

Desconectado Desconectado

Mensajes: 187



Ver Perfil WWW
Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
« en: 21 Agosto 2011, 22:18 »

Hola,

No pude pensar en un mejor título que describa el topic, lamento eso :P
Quiero realizar una resta de 2 números de 16 Bytes, pero es un UDT..
Código
Private Type cD
   A As Long
   B As Long
   C As Long
   D As Long
End Type
 
Private Type tStrg
   tStrg As String * 8
End Type
 
Private Sub Form_Load()
   Dim One As cD, Two As cD, Res As cD
   Dim LS As tStrg
   LS.tStrg = "86420"
   LSet One = LS
   LS.tStrg = "6020"
   LSet Two = LS
   ' Aquí no se como restar ONE - TWO usando el UTD Res
   ' El resultado se mostraría así ..:
   With Res
           ' Operaciones que no se como .¿?
   End With
   LSet LS = Res
End Sub

Pensé en restar One.A con Two.A, y así sucesivamente, pero no funciona (De todas formas no tiene lógica para funcionar así),
No se si esto sirva, pero más o menos es lo que debería devolver:
Citar
  ONE       . TWO       . RES
A 3539000 . 3145782 . 3145784
B 3276852 . 3145778 . 3145780
C 2097200 . 2097184 . 2097200
D 2097184 . 2097184 . 2097184
  =86420  . =6020    . =80400
Más o menos creo que capta la idea ..
Alguna ayuda :P

SaluDOS!!!


En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
« Respuesta #1 en: 21 Agosto 2011, 22:55 »

pues...

Para hacer la resta debes pasar los strings a numero... (Ni siquiera te acercas a los numeros de la string).

Al hacer el LSET lo que andas haciendo es que SOLO COPIAS los bytes tal cuales de un UDT a otro UDT, es decir que tan solo el string "6420" es el numero "9007336695791664", es decir un numero de 8 Bytes (Double)... asi que la operacion matematica que tu planteas esta alocada...

Cada caracter de una string son 2 bytes es decir que en un tipo long solo caben dos caracteres... aun que esto creo que ya lo sabes por que en el UDT tStr creas un buffer adecuado a el UDT cD.

El metodo es mas complicado aun (Debes crear una funcion que sume).

Dulces Lunas!¡.


« Última modificación: 21 Agosto 2011, 23:06 por BlackZeroX▓▓▒▒░░ » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
« Respuesta #2 en: 21 Agosto 2011, 23:20 »


Mirate este ejemplo d eloq ue digo, es complicado hacer una resta como la quieres hacer...

Código
 
Option Explicit
 
Private Type udtDouble
   value As Double
End Type
 
Private Type udtStr
   value As String * 8
End Type
 
Private Sub Form_Load()
Dim One     As udtDouble, _
   Two     As udtDouble, _
   Res     As udtDouble
Dim tStr    As udtStr
 
 
   tStr.value = "8"    '1000 0000
   LSet One = tStr
 
   tStr.value = "2"    '0010 0000
   LSet Two = tStr
 
   Res.value = (One.value - Two.value) ' 1000 0000 - 0010 0000 = 11000000 = (192 >> 4) = 12
   LSet tStr = Res
 
   Debug.Print tStr.value '= 192
   Debug.Print Asc(tStr.value) '= 12
   
End Sub
 
 

Dulces Lunas!¡.
En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
EddyW

Desconectado Desconectado

Mensajes: 187



Ver Perfil WWW
Re: Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
« Respuesta #3 en: 21 Agosto 2011, 23:39 »

Precisamente estaba pensando en esos 2 Bytes, gracias por aclarar, me va ha servir tu ejemplo ;)
Tengo otra duda que me saltó, por que esto 'esta mal'?

Código
Private Type bByte
   L() As Byte
End Type
 
Private Sub Form_Load()
   Dim EJ As bByte
   ReDim EJ.L(1 to 100) As Byte
   MsgBox LenB(EJ) ' => 4 ¿o.O?
End Sub

Supongo que es por que es una variable dinámica, pero ¿no hay forma?,

SaluDOS!!!
En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
« Respuesta #4 en: 21 Agosto 2011, 23:49 »

lo que pasa es que:

L() As Byte

Se trata como puntero a una structura SafeArray... que a su vez tiene un miembro pvData que apunta al 1er indice del array.

Dulces Lunas!¡.
En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines