Home | Chi sono | Contattami
 

Progr. lineare

Delphi
 
Componenti
  Database
 
Miei articoli

Windows

Miei articoli 

 

Da .exe a .dll: Parte 1

In questa serie di articoli vado a raccogliere parecchi concetti: il filo conduttore di tutto è il passaggio da un .exe realizzato in Delphi ad una dll che esegue le stesse cose. Come al solito non mi sono spiegato un granchè, quindi è meglio buttarsi direttamente a capofitto.

1. Tradurre un .exe in una dll

Bene... prenderemo in esame uno dei programmini che ho fatto in passato e per la precisione l'applicativo per determinare le chiavi di registro modificate in un dato intervallo di tempo (articolo6). Prendiamo in esame il file .dpr (da Delphi: Project->View Source):

program RegEnum; uses Forms, Main in 'Main.pas' {FrmMain}, About in 'About.pas' {FrmAbout}; {$R *.res} begin Application.Initialize; Application.CreateForm(TFrmMain, FrmMain); Application.Run; end.

la trasformazione in una dll è semplicissima

In pratica ci siamo creati una dll, l'abbiamo chiamata con lo stesso nome dell'eseguibile ed abbiamo copiato tutte le righe di codice del main del .exe nella procedura Main della dll (N.B. è una procedura che ci siamo creati noi, non c'entra nulla con le caratteristiche basi di una dll quindi l'avremmo potuta chiamare anche Pippo): tutto qui.

A questo punto potremmo cambiare l'estensione da .dll a .cpl ed avremmo un applet che va in esecuzione nella stessa maniera in cui andava in esecuzione il .exe originale. Tuttavia, anche alla luce degli approfondimenti che dovremo fare in seguito, ci creeremo un eseguibile semplice semplici che carica la dll nel suo spazio di memoria:

program Runner; uses Windows; type TMainProc = procedure(); stdcall; var hModule: Cardinal; MainProc: TMainProc; begin hModule := LoadLibrary('RegEnum.dll'); MainProc := TMainProc(GetProcAddress(hModule, 'MainProc')); MainProc(); FreeLibrary(hModule); end.

exe_convertito_dll.7z

 

 

 
 
Your Ad Here