DLL: Dynamic Linking Library

Slides:



Advertisements
Presentazioni simili
Manerba Daniele – Università degli Studi di Brescia – a.a
Advertisements

Compilazione di Programmi C/C++
Programmazione in Java
Digital FX!32 Conte Davide Crivello Emanuele Ferrando Elisa.
Puntatori in C e C++.
Code::Blocks Ambiente di sviluppo.
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Gestione della memoria
Massa Laura Mela Enrica
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
1 Classi di memorizzazione. 2 Definiscono le regole di visibilità delle variabili e delle funzioni quando il programma è diviso su più file Stabiliscono.
1 Processi e Thread Meccanismi di IPC, Inter Process Communication (1)
Gestione dei Processi. I processi Un processo è unistanza di esecuzione di un programma. Consiste di –Un identificatore univoco (PID) –La handle table.
Dr. Giovanni Stracquadanio
Concetti di base: header file, funzione main(),set caratteri C++, token, operatori, espressioni etc. Flusso di controllo, cicli, costrutti.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 9 Maggio 2012.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
1 Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008) Introduzione a Java: primo programma, installazione dellambiente di sviluppo, compilazione.
Introduzione al linguaggio Java
OPEN OFFICE e IMPRESS Masucci Antonia Maria.
Eliana minicozzi linguaggi L1 Lezione3.
eliana minicozzi linguaggi1a.a lezione2
Perché.Net e non più COM/DCOM ? Superamento dei problemi di COM: Richiede una infrastruttura "non semplice" da ogni applicazione (ad esempio Class Factory.
Gestione di Progetti Software 2 (A.A. 2004/2005) - Lezione 2 1 JAVA: obiettivi di progetto del linguaggio Nota storica: Il linguaggio JAVA (inizialmente.
Struttura dei sistemi operativi (panoramica)
Approfondimento delle classi
nome: sequenza di caratteri usata per denotare un oggetto
memoria gestita staticamente:
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
1 Obiettivi di Windows 2000 Portabilita: scritto in C le chiamate al processore sono isolate codice dipendente dalla piattaforma isolato Estensibilita:
Organizzazione della Memoria (Unix) Text contiene le istruzioni in linguaggio macchina del codice eseguibile, può essere condiviso in caso di processi.
Sistemi Operativi GESTIONE DEI PROCESSI.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
Programmazione modulare nel linguaggio C
1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Web Part e controlli di login Elaborazione di Franco Grivet Chin.
Argomenti della lezione
C# LE BASI 2007 Prima lezione - Introduzione.
Per costruire unapplicazione occorre compilare il file (o i file se più duno) che contengono il testo del programma (file sorgente) Il risultato sono uno.
Il compilatore Dev-C++
Introduzione a C#.
Java Contardi Carlo A.S. 2008/09.
1 Scheduling in Windows 2000 Un thread entra in modalità kernel e chiama lo scheduler quando: Si blocca su un oggetto di sincronizzazione (semaforo, mutex,
Processi e Thread Job: Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle e.
Il Sistema Operativo (1)
Unità Didattica 3 Linguaggio C
Costruzione di applicazioni Compilazione Loading (linking) Esecuzione su Linux.
Java come linguaggio di programmazione
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
2000 Prentice Hall, Inc. All rights reserved. Capitolo 5 (Deitel) Le funzioni Indice degli argomenti Introduzione Moduli nei programmi C 5.3.
Installazione Come tecnico, si potrebbe aver necessità di effettuare una installazione pulita di un sistema operativo. L'esecuzione di una installazione.
Threads.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 novembre I nomi in Java F. Bombi 1 novembre 2002.
Eprogram informatica V anno. ASP.NET Introduzione ASP.NET (Active Server Page) è il linguaggio che, sfruttando la tecnologia.NET, permette di: -scrivere.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 4 - Progettazione del software Ernesto Damiani Università degli Studi.
Concetti Fondamentali sulla Programmazione
1 1. Introduzione alla gestione della memoria 2. Swapping 3. Memoria virtuale 4. Implementazione 5. Algoritmi di sostituzione Gestione della Memoria.
Università di Ferrara Facoltà di Ingegneria Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B Rita Riccardo
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
Programmazione orientata agli Oggetti Introduzione a Java.
Gestire i dati: download e salvataggio. L’importanza dei dati La quasi totalità delle applicazioni hala necessità di gestire varie funzionalità relative.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Transcript della presentazione:

DLL: Dynamic Linking Library

Librerie programmative Raccolta di routine precompilate d’utilità per più programmi/applicazioni Precompilate = in formato eseguibile Contengono: codice, risorse, dati Per l’uso 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 <stdio.h> Per l’esecuzione del programma le librerie usate devono saranno collegate (linking) al codice eseguibile

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 un’istanza 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 dell’uso Unica istanza sul disco Unica istanza in memoria

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

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

Static linking (esempio) Da Visual C++ 2005 Express Edition New project Impostare un progetto di tipo “Win32 console application” Nel dialog “application settings” impostare l’opzione “Static library” Per implementare una libreria statica occorrono: File header che dichiara i prototipi delle funzioni esportate File dell’implementazione corrispondente

Dynamic linking (esempio) Da Visual C++ 2005 Express Edition New project Impostare un progetto di tipo “Win32 console application” Nel dialog “application settings” impostare l’opzione “DLL” Per implementare una DLL occorrono File header che dichiara i prototipi delle funzioni esportate File dell’implementazione corrispondente File contenente l’entry point della DLL Simile al main di un’applicazione, gestisce eventuali operazioni d’inizializzazione della DLL (opzionale) file header che dichiara i prototipi delle funzioni non esportate (opzionale) File dell’implementazione corrispondente (opzionale) file def che specifica le funzioni da esportare

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

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 e @ come suffisso, più il numero di byte dei parametri

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 l’implementazione delle funzioni esportate) La DLL deve essere disponibile a runtime Nella stessa cartella dell’applicazione Nelle cartelle di sistema Nelle cartelle specificate dalla variabile d’ambiente PATH

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 l’uso (FreeLibrary)

Caricamento delle DLL Load-time vs. Run-time 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 Exception handling Con il caricamento run-time è possibile gestire le eccezioni legate alla mancanza (o impossibilità di trovare) una DLL Performance Con il caricamento a load-time il codice è più snello e un po’ più veloce (non si invoca GetProcessAddress)

DLL entry-point L’entry-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

Gestione delle DLL in memoria Una DLL viene caricata in RAM al primo accesso Quando un processo carica la DLL nel suo spazio d’indirizzamento virtuale, inizializza un contatore di riferimenti alla DLL L’accesso di un nuovo thread alla DLL o una chiamata di LoadLibrary() incrementa il contatore La terminazione di un thread o l’invocazione 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

Visual C++ Express È possibile istallare Visual C++ 2005 Express Edition e Microsoft Platform Software Development Kit (SDK), seguendo le istruzioni disponibili presso: http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/ Nota: bisogna scaricare 2,5 MB per inizializzare l'istallazione + altri 91 MB per completarla + circa 200MB per SDK.

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