Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: LeandroA en Agosto 21, 2012, 04:10:26 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.
-
Leandro mira arme este codigo que te permite compartir valores a nivel de thread, arme un sistemita con un flag y un valor para poder almacenar mas de un parametro, es bastante simple de entender y modificar a gusto.
Option Explicit
Private Const TLS_MINIMUM_AVAILABLE As Long = 64
Private Declare Function TlsGetValue Lib "kernel32.dll" (ByVal dwTlsIndex As Long) As Long
Private Declare Function TlsSetValue Lib "kernel32.dll" (ByVal dwTlsIndex As Long, ByVal lpTlsValue As Long) As Long
Private Declare Function TlsFree Lib "kernel32.dll" (ByVal dwTlsIndex As Long) As Long
Private Declare Function TlsAlloc Lib "kernel32.dll" () As Long
Private Sub Form_Load()
WriteValue &HCAFECAFE, 1234
Debug.Print ReadValue(&HCAFECAFE) '&HCAFECAFE es el identificador que le asignamos a la variable
End Sub
Private Sub WriteValue(ByVal lProp As Long, ByVal lValue As Long)
Dim lIndex As Long
lIndex = GetIndex(lProp)
If Not lIndex = -1 Then
Call TlsSetValue(lIndex, lValue)
End If
End Sub
Private Function ReadValue(ByVal lProp As Long) As Long
Dim lIndex As Long
lIndex = GetIndex(lProp)
If Not lIndex = -1 Then
ReadValue = TlsGetValue(lIndex)
End If
End Function
Private Function GetIndex(ByVal lProp As Long) As Long
Dim i As Long
Dim lIndex As Long
'// Try to find our property.
lIndex = -1
For i = 0 To TLS_MINIMUM_AVAILABLE - 1
If TlsGetValue(i) = lProp Then
lIndex = i + 1
Exit For
End If
Next
Dim lFlagIndex As Long
'// No property found, allocate index.
If lIndex = -1 Then
Do
lFlagIndex = TlsAlloc '// Find two consecutive slots
lIndex = TlsAlloc
If lIndex >= TLS_MINIMUM_AVAILABLE Then Exit Function
Loop While Not lFlagIndex + 1 = lIndex
Call TlsSetValue(lFlagIndex, lProp)
End If
End Function
-
Buenisimo Cobein, ya me estaba dando por vencido, no tenia ni idea de esas apis, y muy bueno sistema.
Saludos.