Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => 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 (vb) [Seleccionar]
Public Function ReadConfig(ByVal lSrc As Long, ByVal iPos As Integer) As Boolean
   ReadConfig = (lSrc And 2 ^ iPos)
End Function

Public Function SaveConfig(ParamArray vValues() As Variant) As Long
   Dim i       As Long
   Dim vTmp()  As Variant
   
   vTmp = vValues
   ReDim Preserve vTmp(0 To 30)
   
   SaveConfig = 0
   For i = 0 To 30
       If vTmp(i) Then SaveConfig = (SaveConfig Or 2 ^ i)
   Next i
End Function


Un ejemplo de uso? Aqui teneis :) :
Código (vb) [Seleccionar]
Private Const lSavedConfig  As Long = &H16E  'SaveConfig(False, True, True, True, False, True, True, False, True, False)

Private Sub Form_Load()
   Dim x       As Long
   
   For x = 0 To 30
       If ReadConfig(lSavedConfig, x) = True Then
           MsgBox "La opcion nº" & x & " esta activada"
       End If
   Next x
End Sub

Public Function ReadConfig(ByVal lSrc As Long, ByVal iPos As Integer) As Boolean
   ReadConfig = (lSrc And 2 ^ iPos)
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
Cita de: 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)
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
Cita de: Karcrack en  9 Julio 2010, 20:08 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)

Cita de: Karcrack en  9 Julio 2010, 20:08 PM
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  >:( )