Newsgroup: it.comp.lang.visual-basic
Titolo: Problema concettuale: design di OLE servers?

Salve a tutti.
Ho un dubbio riguardante il design di server OLE out-process (.EXE).
Sto sviluppando un modulo applicativo che ha una interfaccia utente a
"wizard" (fatto con l'add-in di VB "Creazione operazioni guidate").
Questo applicativo deve anche essere un OLE Server (o ActiveX EXE,
chiamatelo come volete).
Il mio dubbio e' questo: come strutturare l'applicativo nelle parti
"interfaccia utente" e "classe di implementazione dell'OLE server"? Ossia:
1) implemento le funzioni nella form (che e' l'interfaccia utente) e nel
modulo di classe richiamo semplicemente quelle funzioni?
oppure
2) implemento le funzionalita' nel modulo di classe e dalla form richiamo
quelle? (cosi' pero' dovrei usare un'istanza della classe per uso interno)
Voi come vi comportate/comportereste?
--
Roal Zanazzi
z...@iol.it

...


Luciano Aimi ha scritto nel messaggio <01be42e6$cadf5da0$1a00330a@lucianoa>...

Concordo con Luciano, un metodo abbastanza comodo e' quello di aggiungere una
nuova Property alla tua form che contiene il riferimento alla classe chiamante;
quindi, supponendo che la tua classe esponga un metodo Show per visualizzare la
form il client fara':
TuaClasse.Show
e quindi,nella classe farai:
Public Sub Show()
Set TuaForm.MiaClasse=Me 'questa e' la nuova property da implementare
TuaForm.Show
End Sub
Se prevedi di rendere MultiUse la tua classe allora, invece di usare
direttamente TuaForm devi crearti una variabile di appoggio "As TuaForm" e
istanziarla ad ogni chiamata del metodo in modo che ad ogni istanza di TuaClasse
corrisponda un istanza di TuaForm
Ciao.
--
Luca Dormio
l...@ifminfomaster.com
ldo...@tin.it


OK, grazie a te e a Luciano per il consiglio.
Ora, pero', viene fuori un altro problema...
Mettiamo che devo avere la possibilita' di:
1) usare l'EXE ActiveX come stand-alone (ossia non chiamato via OLE
automation); faccio una sub Main, istanzio un oggetto della mia classe
Wizard.Application e faccio Application.Visible = True, cosi' visualizzo la
form.
Fin qui tutto bene, nella form al click di un checkbox aggiorno delle
properties della classe, OK.
2) uso l'EXE via ActiveX, ma con la form visualizzata. Alla modifica di una
property, aggiorno anche dei checkboxes sulla form.
PROBLEMA: una delle checkboxes e' la stessa di prima, e nel suo evento click
aggiorno una property della classe, che mi modifica la form, che mi
richiama... STACK OVERFLOW, logicamente.
Come si puo' risolvere "elegantemente" il problema?
Se metto tutto il codice di aggiornamento nella classe o tutto nella form,
perdo uno dei 2 punti sopra descritti.
L'unica soluzione che mi viene in mente e' una property "flag" friend della
classe da settare prima della modifica da parte della form e resettare
subito dopo.
Ma non mi e' quello che io giudico "una soluzone elegante" ;-)
Altre idee?
--
Roal Zanazzi
z...@iol.it

Come si puo' risolvere "elegantemente" il problema?
C'e' un'alta probabilita' che non abbia capito il problema, ma -nel caso
abbia capito-ti suggerisco di usare una variabile Static:
Sub chkProp1_Click()
    Static bInHere As Boolean
    If bInHere Then Exit Sub
    bInHere = True
    ; tuo codice
    bInHere = False
End Sub
Hope it helps!
Ciao
Gian Michele Bertoni
--
Home Page: 
http://space.tin.it/computer/gbertoni/

abbia capito-ti suggerisco di usare una variabile Static:
Direi che hai capito.
La soluzione della variabile static (praticamente un semaphore) funziona,
anche se speravo in una soluzione a livello di design dell'OLE server.
Comunque grazie.
--
Roal Zanazzi
z...@iol.it