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:
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 :) :
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 :)
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)
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
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 :)
Esta buena la funcion :D (que triste es no saber nada de bits >:( )