Newsgroup: it.comp.lang.visual-basic
Titolo: Passaggio valori tra eseguibili

Probabilmente è una banalità, ma evidentemente mi sfugge qualcosa...
Ho
due eseguibili A.exe e B.exe, entrambi dotati di vari form, moduli e
classi, creati con VB6sp5.
Vorrei che l'eseguibile A.exe lanciasse
l'eseguibile B.exe il quale, dopo una serie di operazioni, restituisse
all'eseguibile A.exe un valore.
Il valore che devo passare è contenuto in
una variabile pubblica Double dichiarata nel modulo del form principale di
B.exe.
B.exe deve essere un applicativo stand-alone.
Riesco ad
utilizzare le classi dell'eseguibile B.exe (salvato come EXE ActiveX) in
A.exe, ma non riesco a passare valori.
Non riesco nemmeno a lanciare B.exe
all'interno di A.exe.
E' possibile risolvere la cosa senza utilizzare la
clip-board o senza dover fondere A e B in un unico progetto?
Ho seguito,
credo, tutte le regole sull'utilizzo delle variabili pubbliche.
Vi
ringrazio in anticipo.
-- 
Giorgio
--------------------------------
Inviato via 
http://usenet.iol.it

 all'interno di A.exe.
Temo ci sia un po' di confusione...
Se "riesci ad utilizzare le classi" allora non hai bisogno di avviare
l'eseguibile; quando in A crei un riferimento ad una classe pubblica di B,
quest'ultimo si avvia implicitamente, una volta per tutte oppure in piu'
istanze a seconda che la classe sia definita come MultiUse o SingleUse (poi
non e' detto che tu veda l'interfaccia dell'eseguibile B... dipende se la
classe attiva o meno una form)
Allo stesso modo, utilizzare una classe di B in questo modo, vuol dire che
come minimo riesci a crearne un istanza e a "vedere" almeno una proprieta' o
metodo pubblico, ecco quindi che gia' hai un posto dove leggere o scrivere
un valore; le variabile pubbliche che definisci nelle form e nei moduli di
codice di B in questo caso non possono essere usate direttamente, tutti i
valori devono essere esposti attraverso la classe, sempre tramite proprieta'
e/o metodi.
Se dai un occhiata ai messaggi della settimana scorsa troverai il topic "far
comunicare 2 applicazioni (fatte da me)" dove si affrontava lo stesso
argomento
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

Ciao
Ciao


 niente.
Questo va bene in quanto hai detto che B deve comunque funzionare come
programma stand alone; se il tuo valore deve per forza essere recuperato da
li, puo' essere sufficiente che la classe si assicuri che la form sia
caricata (vedi insieme Forms) e eventualmente la carichi analogamente a
quanto fa la sub Main
Questo e' necessario perche' la creazione di una classe MultiUse puo'
avvenire quando il programma e' gia' attivo, e allora la form e' caricata,
oppure puo' lanciare implicitamente il programma, come detto, e con questo
tipo di attivazione non e' detto che la Sub Main venga eseguita


tipo di attivazione non e' detto che
la Sub Main venga eseguita
Ho capito qualcosina...
Per completezza.
Il
giochetto dovrebbe essere circa questo:
- nell'applicazione A creo un
collegamento con la B mediante Project > References... > [seleziono B.exe];
a questo punto tutte le classi di B sono disponibili in A;
- creo (Dim +
Set) oggetti riferiti alle classi rese disponibili da B.
- In B avrei
bisogno di creare un modulo di classe CPippo (MultiUse) nella quale
definisco una classe
Public mioForm as frmPrincipaleB
(dove
frmPrincipaleB è il form di partenza dell'applicazione B, quello che posso
caricare nel Sub Main() con la proprietà Show utilizzando B in stand-
alone);
- In A creo un oggetto x (Dim+Set) del tipo mioForm e poi, se
voglio lanciare l'applicazione B dall'interno di A, uso x.Show;
- Il
valore di di B che mi serve lo recupero e lo carico in con altra classe
pubblica.
Tutto questo non funziona perché quando compilo B, ovviamente,
VB mi dice che non è possibile creare classi pubbliche ottenute da oggetti
"intrinsecamente" privati (in questo caso il form principale
frmPrincipaleB).
Quindi non riesco a visualizzare il form frmPrincipaleB
:-)
Dov'è il trucco? Come riesco a rendere disponibile la classe mioForm
(uguale a frmPrincipaleB) all'interno di A?
Cioè, anche se la classe la
dichiaro come MultiUse non riesco a creare una oggetto pubblico uguale al
form per renderlo disponibile all'esterno.
Ciao e grazie!


 (uguale a frmPrincipaleB) all'interno di A?
Il "trucco" e' che non devi (e non puoi) usare direttamente i controlli
presenti in B; devi esporre tutto tramite l'interfaccia (non parliamo di
interfaccia grafica in questo caso, ma l'insieme di property, metodi e
eventi della classe) della classe CPippo
quindi per leggere una variabile pubblica di frmPrincipaleB puoi creare in
CPippo
Public Property Get Valore() As Double
Valore = frmPrincipaleB.Valore
End Property
se hai bisogno di un metodo per visualizzare la form
Public Sub ShowPrincipale()
frmPrincipaleB.Show
End Property
e cosi' via... il tutto e' molto semplificato, dovresti controllare se il
form e' gia' attivo, eventualmente crearne un istanza invece di usare
direttamente quella predefinita (quindi dim f as frmPrincipaleB, set f ...,
f.Show) ecc.
Siccome l'argomento e' comunque vasto, e delicato, dai messaggi precedenti
incollo ancora una volta i tre capitoli della guida di VB (MSDN) dove
trovare informazioni sull'argomento:
"Programming with Objects"
per l'utilizzo generale di classi e oggetti
"Programming with Components"
per l'accesso agli elementi suddetti forniti da applicazioni e librerie
esterne
e quindi
"Creating ActiveX Components"
per creare i propri componenti


Ciao
Ciao e grazie ancora!
