Newsgroup: it.comp.lang.visual-basic
Titolo: Programma ad architettura modulare

Ciao a tutti,
vi disturbo per una curiositŕ.
Secondo voi come potrebbe essere possibile sviluppare in VB (o 
VB.NET
)
un'applicazione modulare a plug-in simile a quella che ha ad esempio
Photoshop?
Mi spiego: in Photoshop ho un eseguibile principale che 'manipola'
dati/oggetti (in questo caso immagini) attraverso delle operazioni.
Installando successivamente dei 'plug-in' si possono introdurre delle
operazioni nuove sugli stessi dati, eventualmente anche delle dialog-box ad
hoc.
Questi plug-in perň non sono degli eseguibili veri e propri e a volte basta
addirittura copiare il file (in genere uno per plug-in) in una
sottodirectory prestabilita della cartella principale dell'applicativo.
L'exe principale 'sente' la presenza del plug-in in fase di esecuzione e
mette a disposizione a menu la possibilitŕ di richiamare le operazioni
'esposte' dal plug-in (che spesso č di terze parti); operazioni che spesso
non sono richiamate direttamente ma tramite una o piů forms anch'esse
racchiuse nel plug-in. Il plug-in va a lavorare sempre sui
dati/oggetti/documenti aperti nella form dell'exe principale (di solito una
MDI).
Voi che ne dite? E' fattibile? Se si quali potrebbero essere le strade
percorribili?
Vi ringrazio tantissimo per questi consigli........
GRAZIE
Ciao
dix

 percorribili?
metodi per fare plug-in sono diversi ma in vb credo sia d'obbligo l'uso di
un  activex.I tuoi plug-in dovranno essere dei semplici exe che tramite il
tuo activex scambieranno dati con la tua applicazione.
Potresti anche usare altri metodi ma il mio consiglio (soprattutto in vb) è
l'uso di activex.
ciao


Non riesco a capire questo passaggio.
Se sia l'applicazione principale che i vari plugin sono degli eseguibili,
l'activeX cosa fa e dove è posizionato?
Potresti per favore spiegarmi nuovamente il ruolo del mio activeX?
Grazie mille per il competente supporto e scusa l'inesperienza.
dix

 Grazie mille per il competente supporto e scusa l'inesperienza.
il tuo activex interfaccia la tua applicazione ai vari moduli(plug-in) al
fine di rendere visibili le varie proprietà e metodi .
Però prima dovresti provare a creare qualche activex altrimenti diventa dura
spiegarti tutto.Dopo che avrai fatto un po di esperienza potrai chiedere più
nel dettaglio.Potresti ad esempio provare ad usare gli activex.exe che sono
normali applicazioni che rendono visibili le classi come activix.
ciao

 normali applicazioni che rendono visibili le classi come activix.
Grazie ancora....
comincio a fare qualche esperimento.
In effetti non ho molta esperienza con lo sviluppo di activeX, le uniche
cose fatte sono un componente OCX da riutilizzare in vari progetti e, questo
ancora ai tempi del VB5, un active document che girava in Internet Explorer.
Tutto qui. Mi sa che devo riprendere in mano un po' il tutto...
GRAZIE
dix

 comincio a fare qualche esperimento.
E' tutto sommato piuttosto semplice, ci vuole più a dirlo (e spiegarlo) che
farlo.
Immagina che il tuo prog sia Photoshop, che indicavi come esempio.
Una soluzione potrebbe essere questa:
Dici a tutti: i miei plugin devono essere
- DLL AvtiveX
- Esporre una classe di nome PlugIn
- Questa classe deve avere i metodi
    Public Sub Elabora(Pic As IPictureDisp)
    Public Function Descrizione As String
Metti che tu fai il tuo plugin, compili la dll dix_mtd1.dll, con nome
progetto uguale al nome del file (dix_mtd1)
- Photoshop parte
- vede che c'è dix_mtd1.dll
- tenta la creazione di
    Dim objPlugIn as Object
    Set objPlugIn = CreateObject("dix_mtd1.PlugIn")
    ' nota che entrambi i nomi sono conosciuti!
- Se va in errore tenta la registrazione (es. con regsvr32)
- Ricrea l'oggetto
- Mette tra i menu
    objPlugIn.Descrizione
- Al click del menu basta eseguire
    Call objPlugIn.Esegui(PictureAttiva.Picture)
- objPlugIn fa tutto il suo lavoro
Ecco fatto!
a patto che i moduli si chiamino tutti in modo differente (dix_mtd1,
dix_mtd2, pippo_xr7...) il tuo prog è completamente modulare.
Ovviamente questo è solo uno spunto. :)
Ciao
--
y = f(
http://neodatatype.interfree.it/index.html
)

GRAZIE MILLE PER LA DRITTA!
Sei stato di grande aiuto, ora ho le idee un po' più chiare.
Scusa per averti fatto scrivere tutto quel codice.
Comunque ora ho uno spunto da cui partire per fare un po' di prove.
Grazie ancora!
dix


ciao,
A.
UGIdotNET - 
http://www.ugidotnet.org

 Implements IPlugIn
[cut]
Notevole! Ho finalmente trovato (...e forse anche un po' capito...)
un'applicazione delle interfacce in VB6.
Domanda: se la classe IPlugIn è PublicNotCreatable ho visto, provando un
po', che non si può istanziare niente di quella classe, nemmeno creare una
interfaccia secondaria in una classe con Implements. Sbaglio?
Cioè, a cosa serve impostare a PublicNotCreatable la propietà Istancing di
una classe?
Da quanto ho capito per usare all'esterno una nuova istanza di una classe di
questi tipo, nel server (la DLL) ci deve essere già una istanza di quella
classe.
Mi sfugge un po'...
Nel tuo esempio dici di marchiare così la classe interfaccia per
*blindarla*? Cioè per impedire che chi usa la DLL la usi a sproposito? Se
sì, in che modo?
(Senza cosiderare il fatto che provando a compilare una DLL con una sola
classe PublicNotCreatable VB mi ha dato errore e solo grazie alla lettura
del libro di Balena mi sono accorto è necessario che in una DLL ci sia
almeno una classe *creabile* =:-O ).
Ciao e grazie!
--
Giorgio
--------------------------------
Inviato via 
http://usenet.libero.it

     Set mioPlugIn=CreateObject("GfxEffects.Blur")
In questo modo però PhotoShop non saprà mai che la classe è
"GfxEffects.Blur", a meno di non fornire un ulteriore info, es. con un file
"GfxEffects.ini" da accompagnare.
Invecie se si dice "la classe si deve chiamare Pippo" pasta richiamare
"<nome_file>.<Pippo>", entrambi noti.



ciao
A
UGIdotNET - 
http://www.ugidotnet.org

 Giorgio
