elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long  (Leído 2,141 veces)
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
[SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long
« 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 :)


En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long
« Respuesta #1 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)


En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long
« Respuesta #2 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
« Última modificación: 9 Julio 2010, 20:10 pm por Karcrack » En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long
« Respuesta #3 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 :)
En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: [SNIPPET] SaveConfig() - Almacena toda la configuracion en un Long
« Respuesta #4 en: 9 Julio 2010, 20:34 pm »

Esta buena la funcion  :D (que triste es no saber nada de bits  >:( )
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines