La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

DLL: Dynamic Linking Library. Librerie programmative Raccolta di routine precompilate dutilità per più programmi/applicazioni –Precompilate = in formato.

Presentazioni simili


Presentazione sul tema: "DLL: Dynamic Linking Library. Librerie programmative Raccolta di routine precompilate dutilità per più programmi/applicazioni –Precompilate = in formato."— Transcript della presentazione:

1 DLL: Dynamic Linking Library

2 Librerie programmative Raccolta di routine precompilate dutilità per più programmi/applicazioni –Precompilate = in formato eseguibile –Contengono: codice, risorse, dati Per luso di una libreria in un programma, bisogna conoscere i prototipi (header) delle routine –Le librerie vengono distribuite con un file header che contiene i prototipi e viene importato nei programmi –In C/C++ la direttiva per importare un file header è #include –Per esempio: #include Per lesecuzione del programma le librerie usate devono saranno collegate (linking) al codice eseguibile

3 Static/Dynamic linking Static linking –Il collegamente avviene a compile-time –Il linker estrae le routine usate dalla libreria e le allega al codice eseguibile del programma –Esempio: librerie runtime del C (stdio.h, stdlib.h, …) –Esiste unistanza delle routine per ogni programma che le usa Dynamic linking libraries (DLL) –Il collegamento avviene a runtime –Il codice delle routine non è allegato al programma, ma viene caricato separatamente al momento delluso –Unica istanza sul disco –Unica istanza in memoria

4 Perché le DLL in Windows Condivione di codice: risparmia spazio su disco e memoria per le applicazioni –Inizialmente scelto per permettere a Windows di lavorare con poca memoria, pur lanciando più programmi simultaneamente (multitasking) Modularità –Fare una modifica al codice condiviso da più applicazioni impatta solo sulla DLL corrispondente (più semplice distribuire service pack) –Semplifica la distribuzione dei service-pack di aggiornamento del sistema Estendibilità dinamica del sistema –È più semplice aggiungere nuovi moduli (pluging) per applicazioni preesistenti Attenzione però… al problema del DLL hell –Conflitti fra diverse applicazioni che usano versioni differenti della stessa DLL

5 Ruolo delle DLL in Windows Essere un contenitore di codice eseguibile riusabile Esportare dati e codice contenuti ai processi che vogliono utilizzarli

6 Static linking (esempio) Da Visual C Express Edition –New project –Impostare un progetto di tipo Win32 console application –Nel dialog application settings impostare lopzione Static library Per implementare una libreria statica occorrono: –File header che dichiara i prototipi delle funzioni esportate –File dellimplementazione corrispondente

7 Dynamic linking (esempio) Da Visual C Express Edition –New project –Impostare un progetto di tipo Win32 console application –Nel dialog application settings impostare lopzione DLL Per implementare una DLL occorrono –File header che dichiara i prototipi delle funzioni esportate –File dellimplementazione corrispondente –File contenente lentry point della DLL Simile al main di unapplicazione, gestisce eventuali operazioni dinizializzazione della DLL –(opzionale) file header che dichiara i prototipi delle funzioni non esportate –(opzionale) File dellimplementazione corrispondente –(opzionale) file def che specifica le funzioni da esportare

8 Esportare le funzioni Metodo generale utilizzare un file.def (Module Definition file) Metodo Microsoft specific Dichiarare le funzioni da esportare e importate rispettivamente con __declspec(dllexport) __declspec(dllimport)

9 Convenzioni di chiamata Determinano il modo in cui i parametri sono depositati e letti dallo stack. La convenzione di chiamata standard è __stdcall che corrisponde alle seguenti convenzioni: –La funzione chiamata ha la responsabilità di pulire lo stack –I parametri sono passati in ordine da destra verso sinistra –Il nome della funzione viene decorato per evitare di incappare in funzioni con lo stesso nome: Carattere _ come prefisso come suffisso, più il numero di byte dei parametri

10 Uso di una DLL (i/ii) Caricamento in memoria in modalità load-time –Il programma utilizzatore include il file header che dichiara i prototipi delle funzioni esportate dalla DLL –Il programma utilizzatore viene collegato ad un file.lib generato in fase di creazione della DLL Simile ad una libreria statica, ma contiene solo le informazioni per caricare la DLL (non limplementazione delle funzioni esportate) –La DLL deve essere disponibile a runtime Nella stessa cartella dellapplicazione Nelle cartelle di sistema Nelle cartelle specificate dalla variabile dambiente PATH

11 Uso di una DLL (ii/ii) Caricamento in memoria in modalità run-time –Non è necessario includere alcun header, né collegare alcun file lib –Il caricamento viene gestito direttamente dal programma –Procedimento Definire i prototipi da usare come puntatori a funzione Caricare la DLL direttamente dal file system (LoadLibrary) Estrarre le funzioni da usare dalla DLL (GetProcAddress) Gestire gli errori di LoadLibrary e GetProcAddress Rilasciare la libreria dopo luso (FreeLibrary)

12 Caricamento delle DLL Load-time vs. Run-time 1.Con il caricamento run-time non cè bisogno di avere la import library della DLL da usare –Bisogna comunque conoscere le funzioni da usare e i loro parametri –Però è possibile usare funzioni non esplicitamente documentate 2.Exception handling –Con il caricamento run-time è possibile gestire le eccezioni legate alla mancanza (o impossibilità di trovare) una DLL 3.Performance –Con il caricamento a load-time il codice è più snello e un po più veloce (non si invoca GetProcessAddress)

13 DLL entry-point Lentry-point di una DLL è la funzione dllMain con tre parametri: –HANDLE hModule: riferimento alla DLL stessa –DWORD ul_reason_for_call: ragione della chiamata: DLL_PROCESS_ATTACH: la DLL viene caricata da un nuovo processo DLL_THREAD_ATTACH: la DLL viene acceduta da un altro thread di un processo DLL_THREAD_DETACH: la DLL viene rilasciata da un thread DLL_PROCESS_DETACH: la DLL viene rilasciata da un processo –LPVOID lpReserved: riservato per usi futuri

14 Gestione delle DLL in memoria Una DLL viene caricata in RAM al primo accesso Quando un processo carica la DLL nel suo spazio dindirizzamento virtuale, inizializza un contatore di riferimenti alla DLL Laccesso di un nuovo thread alla DLL o una chiamata di LoadLibrary() incrementa il contatore La terminazione di un thread o linvocazione di FreeLibrary() decrementa il contatore Quando il processo termina (modalità load-time) o quando il contatore va a 0 (modalità run-time), la DLL viene scaricata dalla memoria virtuale del processo La DLL viene scaricata dalla RAM quando nessun processo la sta più utilizzando

15 Visual C++ Express È possibile istallare Visual C Express Edition e Microsoft Platform Software Development Kit (SDK), seguendo le istruzioni disponibili presso: Nota: bisogna scaricare 2,5 MB per inizializzare l'istallazione + altri 91 MB per completarla + circa 200MB per SDK.

16 Riferimenti Pinardi, Aruanno, Bisiani. Windows &.NET 2000 in Action – Capitolo 7


Scaricare ppt "DLL: Dynamic Linking Library. Librerie programmative Raccolta di routine precompilate dutilità per più programmi/applicazioni –Precompilate = in formato."

Presentazioni simili


Annunci Google