Newsgroup: it.comp.lang.visual-basic
Titolo: Domanda su come condividere variabili tra 2 programmi

[VB6]
Ciao, avrei una domandina da fare, č possibile condividere delle variabili
tra 2 o piů programmi scritti in VB?
es.
Programma1.exe
Public Variabile1_int As Integer
Public Variabile2_bool As Boolean
Programma2.exe
Public Variabile1_int As Integer
Public Variabile2_bool As Boolean
Come posso condividere a entrambi i programmi le 2 variabili ?
Ringrazio anticipatamente per l'aiuto.
Ciao
Max


Non mi risulta sia possibile direttamente ma forse puoi risolvere con DDE
--
Mauro Cerreto
www.cerretosoft.it

 tra 2 o più programmi scritti in VB?
Sì.
Devi fare un ActiveX-exe e mettere queste variabili come pubbliche in un
modulo.
Poi aggiungi una classe pubblica che esponga queste var tramite delle
proprietà.
Referenzi l'Ax-exe dai due prog. e usi questa classe.
L'ax-exe essendo un out-of-process mantiene le sue proprie variabili che
però a differenza di un exe normale può condividere tramite le classi al suo
interno con altre app, anzi il loro scopo è proprio questo.
Per registrare l'ax-exe basta eseguirlo una volta, per de-registrarlo da dos
fai
myax.exe /unregserver
Ciao
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

"Max"
perche' non scrivi un semplice file esterno
con le variabili e le fai leggere ai programmi ?
esempio veloce con 2 righe di testo :
; 
http://www.hiddensoft.com/autoit3/
$var = RegRead("HKEY_LOCAL_MACHINE\Software\"& _
"Microsoft\Windows\CurrentVersion", "ProgramFilesDir")
$var2 = RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\"& _
"Windows\CurrentVersion\App Paths\msimn.exe\", "Path")
IniWrite ("c:\STORE.INI","Open", "OpenDir",$var)
IniWrite ("c:\STORE.INI","Open", "Path",$var2)
$Read = IniRead ("c:\STORE.INI","Open", "OpenDir","")
$Read2 = IniRead ("c:\STORE.INI","Open", "Path","")
Msgbox(0,"",$Read2)
Run("Explorer.exe " & $Read,"",3)
http://www.allapi.net/cgi-bin/redirect.cgi?place=apiguide
GetPrivateProfileSection .. GetPrivateProfileInt
http://www.mentalis.org/vbexamples/vbexample.php?vbexample=DSSUBCLS&category=MISC
--
Fosco

 myax.exe /unregserver
- Il codice per eseguire queste 2 operazioni è il seguente ??
    per registrare :
        Shell "c:\myax.exe"
    per de-registrarlo
        Shell "c:\myax.exe /unregserver"
Ti ringrazio anticipatamente per l'aiuto.
Ciao
Max


 mmm.. forse non ti è chiaro il concetto:
    l' activex per poter essere"visto" dagli altri programmi deve essere
registrato sul sistema in cui deve essere eseguito, questa operazione viene
effettuata una sola volta per abilitare l' activex, se lo vuoi disinstallare
allora devi de-registrarlo e puoi farlo dal menu start di windows e poi
esegui c:\myax.exe /unregserver. Sul PC su cui sviluppi l' activex lo
registri avviandolo(clicchi l' eseguibile da explorer), su eventuali altri
PC in genere ci penza in pacchetto di installazione a farlo.
Saluti
GC

Ho fatto due semplicissimi programmi :
    Programma1 cambia ciclicamente una variabile booleana :
        Modulo:
            Public Variabile1DelProgramma1_bool As Boolean
        Timer a 2sec. :
            Private Sub Timer1_Timer()
            If Variabile1DelProgramma1_bool Then
                Variabile1DelProgramma1_bool = False
            Else
                Variabile1DelProgramma1_bool = True
           End If
           ImpostaVariabile1 (Variabile1DelProgramma1_bool)
           End Sub
     Programma2 visualizza la variabile booleana :
        Modulo:
            Public Variabile1DelProgramma2_bool As Boolean
        Timer a 1msec. :
            Private Sub Timer1_Timer()
            Label1.Caption = Variabile1DelProgramma2_bool
            End Sub
    EXE ActiveX :
        Modulo:
            Public Variabile1DelProgramma1_bool As Boolean
            Public Variabile1DelProgramma2_bool As Boolean
        Classe :
            Public Property Let
ImpostaVariabile1(Variabile1DelProgramma1_bool As Boolean)
            Variabile1DelProgramma2_bool = Variabile1DelProgramma1_bool
            End Property
- Ho referenziato l' EXE ActiveX nei due programmi
1) Come devo definire la proprietà nel Programma1 in modo che non dia errore
di compilazione ??
Ti ringrazio anticipatamente per l'aiuto (e per la pazienza).
Ciao
Max


 Max
Scusa ma mi sono assentato per qualche giorno,
    EXE ActiveX  deve essere cosi:
        Modulo:
            Private Variabile_bool As Boolean
        Classe :
            '
            Public Property Let Variabile1( bValue As Boolean)
                    Variabile_bool = bValue
            End Property
            Public Property Get Variabile1() as Boolean
                    Variabile1 =  Variabile_bool
            End Property
Una avolta aggiunto il riferimento in ogni progetto che deve usare il server
ActiveX, lo devi istanziare cosi:
- Valido per tutti i programmi che usano l' activeX
   in un modulo o (se non ne hai) nel form principale (di avvio)
    Public VariabiliComuni as MioActivex.NomeClasse
   nel Form_load
        set VariabiliComuni as New MioActiveX.NomeClasse
   nel Form_Unload
       set VariabiliComuni = Nothing
Una volta istanziata la classe puoi accedere alle variabili con:
        VariabiliComuni.Variabile1= True
    oppure
        Label1.caption = VariabiliComuni.Variabile1
In pratica la variabile risiede nel server, e tu, dai programmi esterni, vi
accedi in lettura e scrittura.
Quindi i tuoi programmi diventano:
    Programma1 cambia ciclicamente una variabile booleana :
       ' Modulo:
       '     Public Variabile1DelProgramma1_bool As Boolean     -> Non serve
perchè la variabile è nel server
        Timer a 2sec. :
            Private Sub Timer1_Timer()
                    VariabiliComuni.Variabile1= Not
VariabiliComuni.Variabile1
                    ' Il Not serve ad invertire lo stato ossia se la
variabile è true , Not True restituisce False e viceversa
            End Sub
     Programma2 visualizza la variabile booleana :
       ' Modulo:
       '     Public Variabile1DelProgramma2_bool As Boolean   -> Non serve
perchè la variabile è nel server
        Timer a 1msec. :
            Private Sub Timer1_Timer()
                Label1.Caption = VariabiliComuni.Variabile1
            End Sub
- Tutto questo funziona solo se hai instanziato la classe come ti ho detto
sopra
Ciao
GC