Originariamente inviato da pa0l0
chiarissimo, grazie :sexpulp:

però per me è importante avere un file .exe "singolo" da poter distribuire senza problemi
se disabilito l'opzione "Build with..." l'exe viene di 400k :adhone: che mi pare un po' troppo per un programma di prova che non fa quasi nulla
quindi.. è possibile "unire" solo le dll necessarie all'exe in modo che non richieda nessuna dipendenza esterna?

ciao
Non capisco il problema.

Delphi fornisce il codice sorgente di tutta la VCL, che non è altro che la strutturazione in classi che incapsulano elementi, funzionalità e controlli di Windows chiamando le relative funzioni API.

Ora, a questo punto, Delphi mette a disposizione due alternative: compilare tutto il codice sorgente all'interno dell'eseguibile generato, oppure effettuare una compilazione usando i runtime package.

La prima alternativa consente di ottenere un file eseguibile stand-alone, anche se il codice relativo ai controlli visuali utilizzati ovviamente aumenta le dimensioni del file.

La seconda alternativa consente invece di ottenere un file eseguibile di dimensioni ridotte, più leggero, poichè il codice VCL non viene incluso nell'eseguibile ma viene lasciato nei package originali a cui il file eseguibile si "linka" all'avvio.

I package sono sempre compilati automaticamente utilizzando questa seconda alternativa, poichè altrimenti si terrebbero delle duplicazioni del medesimo codice compilato, conflitti nei nomi delle classi in fase di installazione del package in Delphi, ecc.

Pertanto, se i package utilizzati e linkati dinamicamente contengono classi che si basano su altre classi contenute in altri package, anche in questo caso deve avvenire un link dinamico tra i package in gioco.

Quindi, in conclusione, se compilo un'applicazione in modo che venga linkata dinamicamente ad un determinato package X, che a sua volta si appoggia ad un secondo package Y, nella macchina del cliente dovrò installare entrambi i package.

Non è possibile fare in modo che un package esterno si appoggi al codice binario contenuto nell'eseguibile...al massimo avviene solo l'inverso; inoltre, potrebbero esserci più file compilati che si linkano dinamicamente ai package, pertanto le forme binarie di tali package devono essere esterne e identiche se si vuole ottenere il medesimo impatto su tutti i programmi aggiornando ad esempio uno dei package.

Ciao!