Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: LeandroA en 21 Agosto 2012, 09:11 am



Título: Compartir un valor entre modulos clases
Publicado por: LeandroA en 21 Agosto 2012, 09:11 am
Hola, alguien sabe de alguna forma de compartir un valor entre modulos clases, por ejemplo si yo agrego un modulo publico y pongo Dim Contador as long todas las clases dentro del proyecto pueden consultar ese valor desde el modulo publico, pero la idea de usar un modulo publico para declarar esa única variable no me gusta, debe existir alguna api, para hacer eso no?. (un Global o algo asi)

una opción se que puedo utilizar (CreateWindowEx ,FindWindow,  SetProp y GetProp ) pero no me parece para nada elegante.

mi idea es crear un tipo de semaforo o mejor dicho un tipo contador de clases que se van creando y cuando se descargan, van restando 1 valor al contador, cuando llega la ultima y ve que este valor es 0 llama a una función para descargar lo que cargo la primera

Saludos.


Título: Re: Compartir un valor entre modulos clases
Publicado por: BlackZeroX en 21 Agosto 2012, 11:05 am
No seria mejor crear una clase CONTADORA que se pase por un ¿parámetro/propiedad a una clase que tu quieras? de esta manera en la función finalize llamas a la variable de la clase CONTADORA disminuyendo en 1... por obvias razones al asociar la clase CONTADORA a la clase X aumentaría en 1... otra forma seria crear una CLASE FACTORY y que a este misma se le pueda pasar una CLASE CONTADORA, el trabajo de FACTORY seria crear y asociar TODAS las clases X con una CLASE CONTADORA.

En otras palabras:

 * Clase X <--- Se debe establecer una propiedad o función por la cual se pueda establecer una clase CONTADORA, en su evento finalize debe llamar alguna función o hacer una edición a la variable miembro de la clase CONTADORA para disminuir.
 * Clase FATORY  <--- SOLO se limita a crear y asociar una Clase X con la Clase CONTADORA; se deben crear tantas clases FACTORY como clases X que se deseen administrar... se debe especificar una clase CONTADORA que llevara la función de contar.
 * Clase CONTADORA <-- Solo cuenta Sin importar el tipo de clase que sea, tambien puede estar dirigida a generar eventos...

NOTA: FACTORY y CONTADORA pueden fusionarse para facilidad de analogía...

LO MALO DE VB6 es que las declaraciones friend no funcionan como deberían...

Dulces Lunas¡


Título: Re: Compartir un valor entre modulos clases
Publicado por: BlackZeroX en 21 Agosto 2012, 11:29 am
una opción si quieras usar APIS es usar las APIS semáforos... no me se las respectivas APIS pero tienen una similitud con lo que tu deseas, aun que están destinadas a administración de hilos...

igual te dejo este pdf no tiene que ver nada con APIS pero te dará una idea de lo que te menciono.
http://clip.dia.fi.upm.es/~mcarro/Slides/Concurrent_Programming/04-Semaforos/semaforos_handout_4.pdf

Dulces Lunas¡.


Título: Re: Compartir un valor entre modulos clases
Publicado por: LeandroA en 21 Agosto 2012, 11:42 am
Hola BlackZeroX , gracias por la ayuda, bien la idea es utilizar una sola clase, asi que dudo que se pueda hacer algo asi con el vb nada mas, y las apis que vi fue addAtom y sus derivadas pero no me sirven

puede que con CreateSemaphore sea la solución pero voy a investigarla porque nunca la use. después te cuento si me sirvio

Gracias saludos.



Título: Re: Compartir un valor entre modulos clases
Publicado por: LeandroA en 22 Agosto 2012, 06:10 am
Solucionado, Cobein me tiro unas funciones utilizando TlsAlloc , TlsGetValue, TlsSetValue

http://leandroascierto.com/foro/index.php?topic=1844.0

Saludos.



Título: Re: Compartir un valor entre modulos clases
Publicado por: BlackZeroX en 22 Agosto 2012, 07:29 am
ammm si el caso era no encapsular la variable por así decirlo también podías usar VirtualAlloc, VirtualFree, ... y para leer y escribir ReadProcessMemory  y WriteProcessMemory o mas simple con GetMem4 y PutMem4 y posiblemente ZeroMemory aun que no es realmente necesaria.

Código
  1.  
  2. puerto = VirtualAlloc(ByVal 0&, &H4&, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE)
  3. debug.assert puntero = ERROR_INVALID_ADDRESS // linea de depuración: error al asignar la memoria.
  4.  
  5. PutMem4 puntero, 0  // es equivalente a       ZeroMemory puntero, &H4&
  6. GetMem4 puntero, byval varptr (valor)
  7. // es obligatorio despues de usar virtualAlloc despues de que no se ocupe la memoria pedida...
  8. virtualFree puntero, &h4&, MEM_DECOMMIT
  9. VirtualFree puntero, 0, MEM_RELEASE
  10.  
  11.  

aquí te dejo algo similar a lo que pides solo que yo lo use con LISTAS enlazadas... http://foro.elhacker.net/programacion_visual_basic/src_clistlink_lista_enlazada_mejor_dicho_bloques_enlazados-t339535.0.html

Cuando tenga mi nuevo monitor te hago unas funciones de estilo map.

P.D.: No sirven algunas teclas de mi teclado... por ello te lo pongo de esta manera.

Dulces Lunas¡.