Newsgroup: it.comp.lang.delphi
Titolo: Applicazione modulare e pacchetti runtime

Salve ragazzi,
ho finalmente modularizzato il progetto di un vecchio programma, 
funziona tutto ma ho qualche domanda da porvi(non avendo mai lavorato 
con i pack runtime):
1) è normale che io abbia dovuto caricare tutte le bpl nella cartella 
dell'applicazione (ovviamente si parla del pc del potenziale cliente)
2) se si, esiste un modo per fare un pack di tutte le bpl?
3) se no, quali bpl escludere o come fare per integrarle nel miglior modo.
grazie anticipate :)


Ciao, provo a risponderti anche se non sono molto competente a
riguardo:
1) si è normale, i BPL sono appunto pacchetti o progetti a sè stanti
che vengono richiamati dall'applicazione principale a seconda delle
necessità; non fanno parte dell'applicazione ma sono solo librerie che
possono essere utilizzate da X applicazioni, come le DLL.
2) Non ne capisco il senso. La BPL è già un package e deve essere
inclusa nel setup della tua applicazione, ogni BPL che richiami deve
essere incluso quindi "fare un pack di tutte le BPL" non ha molto
senso a parere mio.
3) Vedi la risposta sopra. Se una BPL non viene utilizzata in un
progetto non inserirla nel setup, semplice.
Spero di essere stato chiaro e di non aver detto castronerie, in ogni
caso aspetta l'intervento di qualche utente più competente di me.

 3) se no, quali bpl escludere o come fare per integrarle nel miglior modo.
Se vuoi determinarlo con una "via sperimentale" poco professionale, 
lancia l'applicazione copiando un file BPL alla volta fino a quando non 
ne vengono richiesti più. :D
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)


ovviamente non era questa la strada che volevo percorrere :P
oppure è possibile far creare o copiare le sole bpl necessarie in una 
unica directory?
thnaks

 unica directory?
Sì. Mi cito da solo... :)
"Devi copiare i file BPL che contengono le classi utilizzate dalla tua 
applicazione, e i file BPL che dipendono dai primi."
Ciao,
   Marco.



il fatto era che non volevo farlo a manina (troppi errori probabili),
però cercando ho trovato che il text box del runtime-package permette di 
fare qualcosa di simile, vedrò e poi farò sapere :)
grazie.

 grazie.
allora, ho lasciato nel suddetto text box solo i nomi dei miei 
pacchetti, ma non è cambiato nulla idee?

 pacchetti, ma non è cambiato nulla idee?
Ma perché, cosa doveva cambiare? Qual è il problema di fondo?


 Ma perché, cosa doveva cambiare? Qual è il problema di fondo?
vorrei che solo i miei pacchetti venissero caricati a runtime, non è a 
quello che serve il textbox, cioè segnalare quali pacchetti sono i 
pacchetti da usare a runtime?

 pacchetti da usare a runtime?
Sì, nella casella di testo si elencano i nomi dei package che si 
desiderano "linkare" a runtime (le unit che appartengono a quel package, 
quindi, non vengono compilate nell'eseguibile).
Qual è il problema? I package non vengono considerati tali?
In breve, cosa vuoi ottenere e cosa riscontri invece?
Ciao,
   Marco.



voglio avere *esclusivamente* i miei package a runtime, i restanti non 
mi interessa, ho lasciato solo i nomi dei miei package nel textbox ma 
l'eseguibile non è cresciuto come avrebbe dovuto.

 l'eseguibile non è cresciuto come avrebbe dovuto.
Usando i *runtime package*, la dimensione dell'eseguibile si riduce, 
poiché il codice che viene incorporato nel file diminuisce (dato che 
viene collegato direttamente dal package).
Sui "restanti package", dipende da cosa si intende: se hai escluso dalla 
casella un package che non usi, ovviamente non c'è nessun effetto 
sull'eseguibile (il codice non veniva usato prima, né viene linkato dopo).
Se i "restanti package" sono quei package da cui dipendono quelli che 
hai elencato, questi vengono linkati a runtime in ogni caso, anche se 
non sono esplicitamente presenti in elenco, per forza di cose: se tu 
rendi l'eseguibile dipendente da un package A che dipende a sua volta da 
un altro package B, non è ovviamente possibile escludere il codice del 
package A e incorporare quello di B, quindi entrambi i package vengono 
collegati a runtime e vanno distribuiti col programma.



in pratica l'eseguibile dovrebbe essere dipendente solo dai package 
creati da me, ma così non è nonstante siano rimasti solo quelli nella 
text box, ed io non me lo spiego.
p.s.
grazie Marco per il tempo dedicato :)

 text box, ed io non me lo spiego.
Il problema è che il package creato da te probabilmente fa riferimento 
anche ad altri package; ad esempio, se hai creato una classe che eredita 
da TObject, hai già una dipendenza dal package "rtl" di Delphi, che deve 
quindi essere anch'esso distribuito assieme al tuo (poiché per 
definizione il codice sorgente di un package non viene compilato 
all'interno di un altro).
E' lo stesso discorso che vale per gli assembly .NET: se tu aggiungi ai 
riferimenti del tuo progetto una DLL che a sua volta ne utilizza 
un'altra, devi ridistribuire entrambe.
Per sapere quali sono, devi esaminare le clausole "requires" dei 
progetti dei tuoi package e individuare i riferimenti anche di questi 
ultimi, e distribuirli assieme alla tua applicazione.
Riassumendo, quando compili con i "runtime package", introduci una 
dipendenza da un package specifico inserendolo nella casella di testo 
relativa, introducendo automaticamente anche la dipendenza a tutti i 
package su cui si basa quello inserito, e così via.



ho capito, ma mi rimane il dubbio di poter capire come distribuire 
insieme alla mia applicazione solo i package necessari e magari come 
cambiare la path degli stessi.

 cambiare la path degli stessi.
I "package necessari" sono quelli che inserisci nella casella di testo, 
più tutti quelli da cui dipendono questi. Non c'è altro da aggiungere.
Il percorso deve seguire le regole delle normali librerie DLL. Per 
poterli spostare e caricare altrove, occorre ricorrere alle funzioni 
Delphi preposte (es. LoadPackage e affini), ma questo è un altro 
approccio ancora.
