Newsgroup: it.comp.lang.delphi
Titolo: Plug-In

Ciao a tutti.
Io ed un mio amico stavamo pensando di realizzare un'applicazione in Delphi,
che funga da cluster... Il tutto per presentarlo poi a fine anno ai
professori, ovviamente il tutto per conto nostro. Da noi stanno ancora
spiegando come funziona un bottone...
Tralasciando per ora il discorso Clustering, avevo intenzione di realizzare
un programma base in Delphi, che poi possa venir migliorato mediante l'uso
di plug-in.
Ad esempio il mio programma gira da server e comunica con dei client,
anch'essi progettati da me. Sul server carico un plug-in che crea un server,
stia in ascolto su una determinata porta, e quando un client si connette, il
server invii dei dati. Ora avrei da chiedervi guide, link ed eventualmente
altro di cui siete a conoscenza, sul come costruire un applicazione con dei
plug-in e sulla scrittura di DLL, in delphi per adesso va bene. La dll è una
cosa secondaria, la cosa che mi interesserebbe di più è la creazione di
un'applicazione che gestisca i plug-in. Quello che non riesco a capire è
come faccia un programma a leggere le funzioni presenti nella dll ed
interagire con essa... Su torry c'è un esempio vago, su google ho trovato
cose non inerentissime all'argomento... Mi rimane il NG. Se qlc di voi ha
già esperienza o link... Sendi qua plz...
Grazie.
        Ciao

 in delphi per adesso va bene. 
Tempo fa ho realizzato una cosa del genre.
Utilizza i package (.BPL) al posto delle DLL.
Definisci una serie di interfaccie che saranno comuni per i plugin.
L'applicazione carichera' i package e crera' l'oggetto del plugin
utilizzando l'interfaccia standard definita all'interno del package
stesso.
Eventualmente esporta una funzione del tipo ListPlugins che restituisce
la lista delle classi interne al plugin in modo che tramite RTTI puoi
creare a runtime.
-- 
I'am what I'am, I do what I can

Ciao,
io per creare plugin con una solida struttura ho trovato informazioni su 
questo sito: 
http://www.obsof.com/delphi_tips/DL613.html
.
Inoltre ci sono anche i sorgenti per poter capire come fare.
Per ora buon lavoro
***Gio***

 ha scritto nel messaggio
news:5Kytb.4978$i_5....@news.edisontel.com...



Ovviamente devi prevedere degli standard di comunicazione, quindi i tuoi
plugin dovranno esportare una o piu' funzioni che l'applicazione principale
puo' chiamare. Poi la tua applicazione puo' ad esempio esportare delle
interfacce che permettono al plugin di utilizzarne le funzionalita'
Ciao,
Stefano

 
http://bdn.borland.com/article/0,1410,27178,00.html

Azz da questi link si arriva su i siti che parlano di DPK e BPL, dove non si
capisce tantissimo, io dovrei usare le DLL... Caspita ogni tanto è difficile
cercare delle cose, ho anche guardato con google sui NG inglesi, ma le cose
non migliorano tantissimo, continuo a cercare intanto. Il top sarebbe
trovare esempi...

 wrote in message
news:ppJub.43331$9_.16...@news1.tin.it...

Dovresti anche specificare cosa devono fare i tuoi plugin.
Di solito, un plugin puo' operare all'interno dell'applicazione,
modificandone dati e/o documenti.
I + semplici ad esempio sono i plugin x un software di gestione immagini.
Basta mettere nei plugin (molto semplicisticamente) una funzione del tipo:
function ExecutePlugin(bmp: HBitmap): Boolean;
e l'applicazione la puo' richiamare tranquillamente, consentendo al plugin
di effettuare modifiche sul bitmap.
Se pero' i dati applicativi sono complessi, non si puo' + passare un
HBitmap, ma magari una IInterface che permette di accedere a un DOM
dell'applicazione.
Se spieghi meglio quello che devi fare ti si puo' suggerire qualcosa, ma non
esiste un sistema unico x ogni tipo di plugin
Ciao,
Stefano

Beh praticamente io metto a dispospostizione un Server ed un Client, in
un'applicazione, i plug-in interagiscono con esso. Ad esempio un plug-in puņ
decidere di inviare a tutti i client connessi al mio server una determinata
stringa, o un file. Oppure, al max con un altro plug-in decidere di mandare
sempre una stringa, ad un solo client connesso, ecc... Ora non so perņ come
fargli usare il mio programma. Diciamo che dovrebbe avere un quasi pieno
controllo dell'applicazione. E' rischioso questo, ma per il momento va bene.

 
Se non ho capito male... vuoi creare una dll che lavori con windows e 
non con il tuo programma o sbaglio???
Perche in tal caso ti aspettano lunghe nottate di prove(ma 
mooooooltoooooo lunghe). Comunque le bpl sono sempre delle librerie, con 
l'unica differenza che lavorano molto bene con delphi e non ti creano 
molte limitazioni che invece le dll ti creano.

Ciao Frunktz,
Da quello che leggo, pare che stiamo lavorando ad una "cosa" con simili
requisiti.
Anche io sto sviluppando un'applicazione che fa uso di "plug-in".
Nel mio caso, i plugin sono i moduli che determinano la funzionalità
dell'applicazione.
Il resto, altro non è che un accentratore di "servizi" (ogni servizio è
rappresentato da un plugin).
Non ho mai utilizzato i BPL per la realizzazione dei plugin, però potrebbe
essere un'alternativa
interessante.
Ogni plugin, è dotato di un'interfaccia ben definita.
Es:
-InstallaPlugin
    Si occupa di:
    1. Chiedere i dati della registrazione del plugin
    2. Eseguire le modifiche necessarie al database
    ....
-RimuoviPlugin
    1. Rimuovere le modifiche fatte al database
    2. Rimuovere la registrazione del plugin
    ....
-EseguiPlugin
    'nduvina :)
L'accentratore è a conoscenza di questa interfaccia e, pertanto, può
utilizzare
opportunamente i plugin.
La comunicazione tra i plugin, e tra questi e l'accentratore, poggia su
TCP/IP (per il momento).
Salumi
Carmine

Uhm, io non devo interagire con Windows, ma con la mia applicazione...
Praticamente lascio il controllo quasi completo, o completo della mia
applicazione(in questo caso possiede un ServerTCP), e questo viene gestito
dal mio plug-in... L'applicazione non fa praticamente nulla, se non eseguire
gli ordini del plug-in.

 gli ordini del plug-in.
Per certi versi, è simile a quello che sto facendo.
In più, la mia applicazione funziona anche da "launcher" per i plugin,da
inizializzatore
dell'ambiente in cui i plugin operano ed altre cosette.
Per la comunicazione Plugin<->Server, ho creato una classe:
TRemoteData = class(TComponent)
...
end;
Tramite questa classe, comunico le volontà del plugin e le eventuali
risposte.

Boh, io non riesco neancora a trovare esempi concreti per esportare la mia
interfaccia. In fin dei conti la mia libreria che fa da plug-in dovrebbe
fare un semplice
Server_Applicazione_Principale.Invia_Dati("ecc...ecc...");
Stavo pensando di farlo anche con dei PostMessage, ma la cosa non mi piace
tantissimo, sono ancora dell'idea di usare plug-in. Grazie ancora a tutti
della pazienza...