Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Karcrack en 9 Julio 2010, 19:38 pm



Título: [SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long
Publicado por: Karcrack en 9 Julio 2010, 19:38 pm
Muchas veces cuando estas programando algo te ves en la necesidad de comunicar dos partes de tu software para que compartan cierta configuracion... como un Builder y un Stub... o un Cliente y un Server...

Cuando esa informacion que han de compartir son simples Booleans (Si/No) como, activar deteccion de Virtual Machines, Melt.. etc... Simplemente puedes almacenar una gran lista de parametros en un simple Long (4Bytes) ;D

He visto Aplicaciones que envian/almacenan cosas como: "ON" o "OFF", si si, en cadenas de texto... :-X Ademas de no ser nada optimo es horroroso por ejemplo abrir el EXE y ver como 20 "ON"s y "OFF"s :-X :-X

Si no me equivoco Cobein ya posteo un codigo que trabajaba con Bitmasks... pero bueno, aqui esta el mio :xD

Aqui va:
Código
  1. Public Function ReadConfig(ByVal lSrc As Long, ByVal iPos As Integer) As Boolean
  2.    ReadConfig = (lSrc And 2 ^ iPos)
  3. End Function
  4.  
  5. Public Function SaveConfig(ParamArray vValues() As Variant) As Long
  6.    Dim i       As Long
  7.    Dim vTmp()  As Variant
  8.  
  9.    vTmp = vValues
  10.    ReDim Preserve vTmp(0 To 30)
  11.  
  12.    SaveConfig = 0
  13.    For i = 0 To 30
  14.        If vTmp(i) Then SaveConfig = (SaveConfig Or 2 ^ i)
  15.    Next i
  16. End Function

Un ejemplo de uso? Aqui teneis :) :
Código
  1. Private Const lSavedConfig  As Long = &H16E  'SaveConfig(False, True, True, True, False, True, True, False, True, False)
  2.  
  3. Private Sub Form_Load()
  4.    Dim x       As Long
  5.  
  6.    For x = 0 To 30
  7.        If ReadConfig(lSavedConfig, x) = True Then
  8.            MsgBox "La opcion nº" & x & " esta activada"
  9.        End If
  10.    Next x
  11. End Sub
  12.  
  13. Public Function ReadConfig(ByVal lSrc As Long, ByVal iPos As Integer) As Boolean
  14.    ReadConfig = (lSrc And 2 ^ iPos)
  15. End Function

Simplemente generas el numero con la funcion SaveConfig() que te permite guardar hasta 31 Booleans/Opciones, luego con la funcion ReadConfig() le pasas el numero de la opcion y la lees :D

Saludos, espero que os sea de utilidad :)


Título: Re: [SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long
Publicado por: raul338 en 9 Julio 2010, 19:55 pm
8 x 4 = 32............... y el bit que falta? :P

Es buena la idea, pero 32 (o 31) me parce algo excesivo, mejor guardar de 8 en 8 como sea necesario en un Byte :) (ahora mismo no tengo el codigo, pero lo habria logrado en .net, de todas formas se puede en vb)


Título: Re: [SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long
Publicado por: Karcrack en 9 Julio 2010, 20:08 pm
8 x 4 = 32............... y el bit que falta? :P

Es buena la idea, pero 32 (o 31) me parce algo excesivo, mejor guardar de 8 en 8 como sea necesario en un Byte :) (ahora mismo no tengo el codigo, pero lo habria logrado en .net, de todas formas se puede en vb)
Se empieza a contar por el 0 :P Ademas, no se puede usar el otro porque 2^31 es demasiado para VB :laugh: :laugh:

Si, bueno, puedes utilizar tantos bits como quieras... desde el 1 al 31...
Supongo que en .NET lo habras hecho mejor, ya que si no me equivoco permite usar mas operaciones de bitwise, como << o >> :D


Título: Re: [SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long
Publicado por: raul338 en 9 Julio 2010, 20:15 pm
.... no se puede usar el otro porque 2^31 es demasiado para VB :laugh: :laugh:
:xD bueno, seria mejor guardar de 8 en 8 (al menos para mi)

Supongo que en .NET lo habras hecho mejor, ya que si no me equivoco permite usar mas operaciones de bitwise, como << o >> :D
Ps.... no conozco como "<<" o ">>".... uso And y Or depende el caso, Aun asi, en vb se puede, Seria como usar un enum de 8 campos...... lo voy a probar :)


Título: Re: [SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long
Publicado por: LeandroA en 9 Julio 2010, 20:34 pm
Esta buena la funcion  :D (que triste es no saber nada de bits  >:( )