Newsgroup: it.comp.lang.visual-basic
Titolo: progetto "modulare"

Salve ragazzi,
oggi ho un quesito particolare per cui non ho saputo nemmeno trovare il 
titolo adatto...
Vorrei sviluppare un software composto da piu "moduli" (plugin) che il 
cliente può comprare rispetto alle sole esigenze che gli servono, vorrei 
inoltre che questi moduli non fossero tutti gia noti all'atto della 
creazione del programma ma fosse possibile aggiungerli nel tempo...avete 
qualke suggerimento su come procedere o su dove leggere qualkosa in 
proposito?
Ciao e grazie Giuseppe
p.s. non so se sono riuscito a spiegare quello che intendo (alle 5:15 del 
mattino mi perdonerete :) )

 marco
Anche la mia idea era questa, solo che approposito di questo ho un dubbio
diciamo che creo una sottocartella plug-in dove andrei a mettere gli 
eseguibili
di una dato modulo e posto che il programma principale tramite command gli 
passi
i parametri (es. nome del DB o cose del genere) ....come faccio a fare 
eseguire questo modulo all'interno del mio programma?
Mi spiego meglio...come faccio a dare la parvenza che sia tutto integrato e 
a non aprire un altra applicazione?
Grazie Giuseppe 

Giuseppe Cozzolino ha scritto:
Mai fatto robe del genere, però potresti fare un cosa "semplice" usando le
DLL Activex.
Supponi di avere un programma principale e due DLL (plug in):
-tutte e due le dll devono avere un metodo pubblico "start" (o come lo
vuoi chiamare)
-bisogna che sia il programma, sia le due DLL abbiano visibilità comune
delle classi dei parametri clsParametriIN, clsParametriOUT (dovrebbe
bastare inserire tali classi in tutti e tre i progetti *senza ricopiarle*) 
-Il programma principale potrebbe funzionare così:
sub main()
if vogliolanciareplugin1 then
	lanciaPlugin "pluginMain.plugin1"
end if
if vogliolanciareplugin2 then
	lanciaPlugin "pluginMain.plugin2"
end if
end sub
Sub lanciaPlugin(nomePlugin As String)
Dim myPlugIn As Object
Dim parametriInput As clsParametriIN ' una classe pubblica generica per i
parametri di ingresso
Dim parametriOutput As clsParametriOUT ' una classe pubblica generica per
i parametri di output
Set myPlugIn = CreateObject(nomePlugin) ' nomePlugin è del tipo
classe.contenitoreclassi
Set parametriOutput = myPlugIn.start(parametriInput)
Set myPlugIn = Nothing
' a questo punto elabora parametri di output se ce ne sono e se servono
End Sub
-ovviamente le classi di parametri in e out devono avere come membri
l'unione dei parametri che servono a tutti i plugin.
termoPilucco
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 *senza ricopiarle*)
[SNIP]
Il concetto e' quello, pero' per poter sfruttare l'early-binding non e' 
sufficiente includere la stessa classe nei vari progetti (anche se il 
sorgente e' unico, vengono compilate come 3 classi differenti)
Detto un po' in fretta, quello che va fatto e' definire una DLL a parte di 
sole interfacce; ovvero che comprende le classi comuni complete di tutte le 
intestazioni dei membri pubblici, anche senza alcun codice al loro interno.
A questo punto l'eseguibile principale fa riferimento a questa DLL, e le 
ulteriori DLL plug-in faranno lo stesso; l'exe principale utilizzera' solo 
variabili di tipo IParametriIN, IParametriOut (il nome arbitrario che hai 
dato alle interfacce) mentre le classi dei plugin dovranno implementare 
nelle proprie classi, che puoi chiamare a piacere, le interfacce relative 
(tramite keyword 'Implements') in modo che vengano riconosciute come classi 
compatibili.
L'exe principale potra' a questo punto caricare la DLL corretta tramite 
CreateObject ma sfruttare comunque l'early-binding con tutti i vantaggi del 
caso.
Detto cosi' e' probabilmente poco chiaro, ma e' piu' semplice di quanto 
sembra; su MSDN c'e' un capitolo relativo al polimorfismo tramite interfacce 
che spiega il tutto per bene.
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown 

Mi inserisco nel topic per fare una domanda:
il ragionamento riportato qui sotto vale solo per .net oppure anche per VB6?
Grazie


 per VB6?
Non era specificato nel messaggio iniziale, quindi ho risposto come se fosse 
riferito a VB6, che supporta questo tipo di programmazione a oggetti (le 
interfacce in senso "puro" non si possono definire, ma una qualsiasi classe 
puo' fungere da interfaccia per un altra)
A maggior ragione, con poche variazioni, vale per .NET


 sembra; su MSDN c'e' un capitolo relativo al polimorfismo tramite [...]
E' già chiarissimo così, grazie per la precisazione.


 Ciao e grazie Giuseppe

Sul numero di questo mese di IoProgrammo c'è un valido esempio di progetto
a plugin realizzabile da VB5 in su.
Ciao MArco
