Cos'è una dll?


90

Questa potrebbe essere una domanda molto noobie, ma nel mondo odierno dello sviluppo di app web molti programmatori non hanno bisogno di occuparsi di dll e quindi non si preoccupano di conoscere il loro scopo.

Allora, cos'è una dll?

  1. A cosa serve?
  2. Come funziona?
  3. Come ne crei uno?
  4. In quali situazioni è appropriato crearne uno?

Mi è stato detto che le dll vengono utilizzate per archiviare librerie di funzioni, ma oltre a questo non so molto. Spero che qualcuno qui possa illuminarmi così posso finalmente smettere di chiedermi cosa stanno facendo tutti quei file .dll nella mia directory di Windows.


Il wiki della comunità dovrebbe essere utilizzato per i casi in cui non ci sono risposte effettive alla tua domanda. Questa è una domanda valida e selezionando la modalità wiki della comunità, impedisci a te stesso e ai rispondenti di ottenere reputazione in questa domanda.
Cody Brocious,

questa domanda ha il potenziale per diventare molto popolare
Tamas Czinege,

1
Tu pensi? Forse per visualizzazioni ma non probabile per voti ... Comunque è già stato risposto 4 volte.
Omar Kooheji,

2
questo è banalmente googleabile ...
annakata

3
Sì, questo è googleable, ma non ho trovato molte buone spiegazioni concise, soprattutto per la questione della creazione di uno e quando è appropriato usarne uno.
Daniel

Risposte:


55

Una DLL è una libreria di collegamento dinamico. È una raccolta di codice e / o dati, che può essere utilizzata da diverse applicazioni (o altre librerie / moduli).

Quindi, ad esempio, i metodi comuni per elaborare i file, lavorare con i componenti della GUI, ecc. Sono resi disponibili nelle librerie in modo che diverse applicazioni possano utilizzare la stessa funzionalità. Ciò non solo riduce la necessità di creare più volte le stesse cose, ma garantisce anche che, ad esempio, le finestre di dialogo comuni siano le stesse tra le applicazioni.

Le librerie possono essere caricate in fase di esecuzione e quindi condivise tra diverse applicazioni simultanee. Questo è chiamato collegamento dinamico.

In alcuni casi la libreria può essere inclusa all'interno dell'applicazione stessa. Questo è noto come collegamento statico. Il collegamento statico semplifica la distribuzione a scapito della flessibilità in quanto un'applicazione diversa caricherà ciascuna la stessa copia della DLL.

Tuttavia, il collegamento statico non è sempre un'opzione. Ad esempio, non è possibile collegare staticamente un'applicazione .NET. L'utente deve disporre delle librerie .NET per eseguire un'applicazione .NET e le librerie (o gli assembly come vengono chiamati in .NET) vengono caricati in fase di esecuzione.

Le DLL vengono create dagli stessi strumenti utilizzati per creare applicazioni. I dettagli specifici dipendono molto dagli strumenti utilizzati.


Grazie per la risposta, una cosa che mi chiedo è come fanno le applicazioni a sapere quali funzioni sono disponibili nella dll? La dll stessa è tutto codice macchina giusto? Quindi come vengono esposte le firme delle funzioni pubbliche nella dll?
Daniel,

Non conosco la maggior parte delle lingue, ma il completamento automatico di Visual Studio ti mostrerà tutte le funzioni disponibili.
Grant il

1
Ma come fa il completamento automatico a scoprire quali sono le funzioni disponibili se la dll è solo codice macchina?
Daniel

2
Le macchine possono leggere il codice macchina. Le DLL possono contenere icone, stringhe, caratteri. Probabilmente c'è un elenco di ciò che contiene da qualche parte lì dentro.
Grant

1
Visual C ++ contiene uno strumento chiamato dumpbin - l'esecuzione di "dumpbin / export any.dll" ti dirà quali funzioni e cose vengono esportate (cioè sono disponibili per l'uso da parte dei programmi che caricano la DLL).
Graeme Perrow,

29

DLL = Dynamic Link Library

Il nome è in realtà abbastanza descrittivo di ciò che realizzano.

Biblioteca

Consente di isolare il codice per uno specifico dominio problematico in un'unica posizione. Quindi condividilo tra più applicazioni. La libreria può essere sostituita con un'altra in qualsiasi momento per correggere bug o aggiungere funzionalità.

Link

È possibile "collegare" la libreria a un'applicazione in modo che la logica nella libreria non venga compilata direttamente nell'applicazione.

Dinamico

La libreria può essere caricata su richiesta. Invece di caricare un gigantesco EXE in memoria, il sistema operativo può caricare solo le parti necessarie. Inoltre, se una DLL è condivisa tra le applicazioni, il sistema operativo può ottimizzare il modo in cui la libreria viene caricata e condividerla tra le app.


10

DLL (libreria di collegamento dinamico) possono essere descritti come piccoli "sottoprogrammi" che hanno lo scopo di aiutare un programma più grande a funzionare bene. Forniscono un mezzo per collegare varie risorse hardware e software (in vari punti nelle sessioni di runtime) al programma eseguibile principale su cui si basano, "in base alle necessità". Ciò elimina la necessità di caricare tutto ciò che ha a che fare con il programma eseguibile principale sulla RAM del computer (memoria ad accesso casuale) quando il programma viene eseguito per la prima volta.

Le risorse software trasportate dalle DLL includono codice per le varie funzioni del programma che non sono realmente necessarie per mantenere il programma in esecuzione: cioè, funzioni che devono essere richiamate solo in determinati momenti durante una data sessione di elaborazione e potrebbero in realtà non averne nemmeno bisogno essere chiamato a tutti. Caricare quelle funzioni (e ce ne può essere un numero considerevole per un dato programma) sulla RAM del computer quando il programma viene eseguito per la prima volta e poi tenerle lì per tutta la sessione sarebbe uno spreco di spazio RAM, che è considerato a un premio.

Un importante progresso:

Lo sviluppo delle DLL è stato un importante progresso nell'elaborazione, perché prima che fossero disponibili, tutto ciò che aveva a che fare con un programma (comprese le funzioni che erano raramente o mai utilizzate) doveva essere caricato sulla RAM quando il programma veniva caricato per la prima volta. Ciò ha portato a un calcolo estremamente inefficiente, con velocità inferiori mostrate da vari programmi. È stato anche estremamente difficile multitasking eseguendo anche un paio di semplici programmi, a causa del conseguente sforzo sulla RAM.

Considerazioni:

Le DLL sono generalmente specifiche della versione. Quelle che funzionano bene, ad esempio, per la versione 1 di un programma (o un linguaggio di programmazione, come potrebbe essere il caso) potrebbero non funzionare bene con la versione 2. La regola generale è che le DLL nella versione precedente tendono a non essere in grado di funzionare bene con la versione più recente, ma quelli della versione più recente possono generalmente funzionare abbastanza bene con la versione precedente del programma o del linguaggio di programmazione.


7

Libreria collegata dinamicamente.

Per darti un esempio, se hai caricato la DLL di qualcun altro nella tua applicazione puoi usare bit di programmazione da essa.

Puoi caricare una DLL che genera numeri casuali che iniziano sempre con "5" o qualcosa del genere.

Nel tuo programma puoi chiamare CrazyDLL.GenerateRandomNumbersSorta () e restituirà il numero.

Per un esempio del mondo reale, ho una DLL che combina 4 caselle di testo (le useresti per digitare indirizzi IP) e accetta automaticamente solo numeri inferiori a 256 e gestisce la pressione del tasto Backspace per passare a una casella di testo precedente.

Ho creato una DLL con quel codice e ora tutto ciò che devo fare è trascinare e rilasciare più di quelle raccolte di caselle di testo di indirizzi IP senza dover duplicare tutto quel codice più e più volte.

La stessa DLL ha anche la funzione per convertire gli indirizzi IP in stringhe esadecimali e altro codice utile.


1

Da MSDN Library :

Una libreria a collegamento dinamico (DLL) è un modulo che contiene funzioni e dati che possono essere utilizzati da un altro modulo (applicazione o DLL).


1

DLL = Dynamic Load Link Library. Come ti è stato detto, è fondamentalmente una raccolta di funzioni, classi C ++ e / o variabili globali. È possibile caricare la DLL in modo statico (cioè il sistema operativo la carica automaticamente all'avvio del programma) o dinamicamente (il programma la carica esplicitamente), a quel punto le funzioni e le cose all'interno della DLL sono disponibili per il programma.

La creazione di uno è simile alla creazione di un EXE, tranne che non è necessario che ci sia una main()funzione. Esistono direttive del linker per indicare al linker di creare una DLL piuttosto che un EXE.

Il motivo principale per cui vorresti farlo è incapsulare del codice in un unico posto e usarlo da più exe, piuttosto che collegare il codice a ciascuno di essi.

Un motivo un po 'storico è che il tuo exe può essere più piccolo poiché parte del codice si trova fisicamente in un file diverso. Ciò significa che la quantità di spazio occupato in memoria dal tuo exe può essere inferiore. Sui sistemi moderni, questo è un problema meno grave di prima, anche se potrebbe ancora essere un problema su Windows Mobile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.