Home | Chi sono | Contattami
 

Progr. lineare

Delphi
 
Componenti
  Database
 
Miei articoli

Windows

Miei articoli 

 

Inglobare un file in un eseguibile


Supponiamo di aver bisogno di un file per l' esecuzione di un programma che abbiamo creato in Delphi, ma non vogliamo portarcelo dietro tutte le volte che vogliamo mettere l' eseguibile su un computer: in queste situazioni può essere utile incorporare il file in questione all' interno dell' eseguibile ed estrarlo (tramite l' utilizzo di alcune righe di codice aggiuntive all' interno del programma) nel corso dell' esecuzione del programma stesso. Si certo ma come??? Non è difficile, basta procedere nel seguente modo:

creo un semplice file di testo ed inserisco una riga del tipo

<nome_risorsa> <tipo_risorsa> <nome_file>

ad esempio supponiamo di aver creato un programma che esegua filmati in flash: occorre il flash player (swflash.ocx) installato sul computer su cui deve andare in esecuzione il programma e quindi può essere utile incorporare tale file nell' eseguibile (per poi estrarlo, copiarlo su disco e registrarlo tramite regsvr32.exe nel corso dell' esecuzione del programma stesso) :

flash_player RT_RCDATA swflash.ocx

flash_player è il nome arbitrario che verrà utilizzato per identificare tale file all' interno dell' eseguibile, RT_RCDATA stà ad indicare una tipologia di risorsa generica (non è un JPEG, una BITMAP, etc... ma un file qualsiasi con un formato non specificato). Salviamo il file di testo appena creato, con estensione RC (ad esempio Risorsa.RC) e copiamo il file da incorporare (in questo caso swflash.ocx) nella stessa cartella: da linea di comando eseguiamo

brcc32 Risorsa.RC

viene creato in output un file con lo stesso nome ma con estensione RES (nel nostro caso quindi Risorsa.Res): tale file contiene la risorsa che vogliamo inserire nell' eseguibile (nel nostro caso swflash.ocx)

A questo punto dobbiamo inserirlo nel nostro eseguibile Delphi: basta inserire la seguente riga

{$R Risorsa.RES}

all' interno del sorgente del progetto (.dpr accessibile tramite Project -> View Source) dopo ogni altra direttiva {$R}
 

A questo punto creiamo l' eseguibile del nostro progetto Delphi: conterrà in automatico il file specificato (swflash.ocx). Si può verificare il tutto aprendo l' eseguibile con ResourceHacker.

Ora passiamo a definire le righe di codice per estrarre tale file nel corso dell' esecuzione del programma e copiarlo su disco :

var ResStream : TResourceStream; FileStream : TFileStream; ResStream := TResourceStream.Create(0, 'flash_player', RT_RCDATA); try FileStream := TFileStream.Create('\SWFLASH.OCX', fmCreate); try FileStream.CopyFrom(ResStream, 0); finally FileStream.Free; end; finally ResStream.Free; end;

Tutto qui.

 

 

 
 
Your Ad Here