Newsgroup: it.comp.lang.visual-basic
Titolo: interfacce e exe activeX

Ciao,
eccomi qui a chiedere lumi su un aspetto che per me e' sempre stato 
particolarment ostico... le interfacce in VB6.
Non ho mai gran che' capito a cosa servissero e perche' si utilizzassero, 
finche', per esigenze reali, non mi e' venuto in mente che questa potesse 
essere l'occasione giusta per utilizzarle.
Faccio un esempio banale per spiegare cosa mi serve, cosa ho fatto e per 
vedere se si riesce a capire cosa dovro' fare.
tramite un mio software, devo inviare dei comandi a dei dispositivi, che 
possono essere una scheda, un altro pc (via XML), ad una friggitrice 
(vabbe', cosi' per dire) ecc.
I comandi che devo inviare sono gli stessi (chiaramente implementati in 
maniera diversa) per ogni dispositivo.
L'idea e' quella di costruire tante classi quandi sono i dispositivi che 
devo comandare, creare una interfaccia secondaria comune a tutte le classi 
ed implementare questa interfaccia nelle classi device, anche per poter 
utilizzare l'ealry binding
Nel client quindi, fare una cosa del genere:
Dim objDevice as iDevice (iDevice e' il nome dell'interfaccia)
.
.
.
if (Mi serve la friggitrice) then objDevice = New clsFriggitrice
else (mi serve di comandare tramite XML un pc) objDevice = New clsXML
.
.
.
chiaramente sia la classe clsFriggitrice, sia la clsXML implementano 
l'interfaccia iDevice.
Mi serve che la classe clsFriggitrice, sia esportata in un Exe ActiveX, 
quindi verra' referenziata tra i riferimenti del progetto.
Nel progetto dell' Exe Activex, oltre alla classe clsFriggitrice, 
chiaramente aggiungo anche la classe iDevice
Ora, se io faccio
Dim objDevice as iDevice
Set objDevice = New clsFriggitrice (ora c'e' un server EXE ActiveX per 
questa classe),
mi viene restituito l'errore di runtime 13, tipo non corrispondente
Ciao a tutti... Maurizio


Dove hai definito IDevice? nel client o nell'exe activex?
Sei stato attento alla compatibilità binaria in compilazioni successive del
server activex?
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 server activex?
...
In realta' ancora non ho compilato il server, lo sto facendo girare tramite 
un'altra istanza di VB.
Nel referenziare il server, la mia clsFriggitrice, nel progetto del client, 
ho referenziato il progetto, non il server.
Ciao... Maurizio 

 Ciao... Maurizio


 properties/component).
...
Al momento, visto che sto facendo delle prove, preferisco non avere 
compatibilita', anche per non sporcare il registro cin le GUID (si chiamano 
cosi' mi pare).
Al limite ricompilo anche il client.

 Al limite ricompilo anche il client.
Beh... l'importante è avere sempre la cosa sotto controllo.


 
http://www.vbforums.com/showthread.php?t=372811
...
Avevo letto dei post simili, ma avendo ora anche l'esempio che riporti nel 
link, tutto e' piu' semplice.
In questo caso, dato che l'interfaccia viene definita nel client, devo anche 
importarla nel progetto del server activeX, giusto?
ciao... Maurizio 


Meglio definire tutte le interfacce in un unico progetto, quindi anche questa
nel server. Anche per non avere riferimenti incrociati.
Altrimenti dovresti trasformare anche il client in un server activex/exe... anzi
ripensandoci temo che quest'ultima cosa sia inevitabile comunque, visto che il
client dovrà passare un'istanza di una sua classe ad un diverso exe (il server),
che quindi non potrà avere Instancing=Private.


 nel server. Anche per non avere riferimenti incrociati.
...
Ieri sera, ripenasndoci, mi e' venuta un'idea che forse e' un pochino meglio 
e piu' facilmente applicabile.
Consideriamo infatti che queste interfacce dovranno essere implementate non 
solo nell'EXE activeX Friggitrice (per riprendere l'esempio di ieri), ma 
anche in XML, frigorifero ecc.
Potre creare due dll ActiveX, una con l'interfaccia secondaria che sto 
utilizzando (quella, per intenderci, che e' gia' implementata nel server), 
ed un'altra formata da una sola classe, un evento ed un metodo per alzare 
l'evento.
Nei progetti dei vari server ActiveX potrei inserire tra i riferimenti le 
due dll (interfaccia e classe), nel client, probabilmente, mi basta quella 
con la classe.
Nel client creo una variabile della classe con l'evento (chiamiamola 
clsEvento) con WithEvents e la istanzio con la clausola = New clsEvento , 
passo un riferimento di questa classe al server ActiveX, dal server chiamo 
il metodo per alzare l'evento, ed intercetto l'evento all'interno del 
client.
Chissa' se funziona :)
Ciao... Maurizio

 Ciao... Maurizio
Non sarà il massimo dell'eleganza e della compattezza ma dovrebbe funzionare e
potrebbe servirti per sperimentare un po' di buona vecchia tecnologia COM.


 potrebbe servirti per sperimentare un po' di buona vecchia tecnologia COM.
...
Oddio, non era esattamente la risposta che mi aspettavo, avrei gradito piu' 
:" Wow, idea grandiosa, come mai non ci abbiamo pensato prima, 
congratulazioni" ed una valanga di complimenti per riempire un po' il mio 
ego, pero' posso accontentarmi di vedere che la cosa funziona.
Il tempo e le prove ci diranno se la cosa va anche bene :-)
 

 Il tempo e le prove ci diranno se la cosa va anche bene :-)
Ecco, diciamo che dipende dalla prospettiva di sviluppo che ha il tuo progetto.
Buon lavoro! ;-)


 Buon lavoro! ;-)
...
Buon lavoro a te, ed a tutti quelli che leggono.
Ciao... Maurizio