Cosa sono esattamente i file DLL e come funzionano?

Come funzionano esattamente i file DLL? Sembra che ce ne siano molti, ma non so cosa siano o come funzionano.

Quindi, qual è l’accordo con loro?

Cos’è una DLL?

Le librerie di collegamento dinamico (DLL) sono come EXE ma non sono direttamente eseguibili. Sono simili ai file .so in Linux / Unix. Vale a dire, le DLL sono l’implementazione di MS di librerie condivise.

Le DLL sono così simili a un EXE che il formato del file stesso è lo stesso. Sia EXE che DLL sono basati sul formato di file Portable Executable (PE). Le DLL possono anche contenere componenti COM e librerie .NET.

Cosa contiene una DLL?

Una DLL contiene funzioni, classi, variabili, interfacce utente e risorse (come icone, immagini, file, …) utilizzate da un EXE o da un’altra DLL.

Tipi di librerie:

Su praticamente tutti i sistemi operativi, ci sono 2 tipi di librerie. Librerie statiche e librerie dinamiche. In Windows le estensioni dei file sono le seguenti: Librerie statiche (.lib) e librerie dinamiche (.dll). La differenza principale è che le librerie statiche sono collegate all’eseguibile in fase di compilazione; mentre le librerie con collegamenti dinamici non sono collegate fino al momento dell’esecuzione.

Altro su librerie statiche e dinamiche:

Normalmente non si vedono le librerie statiche sul computer, perché una libreria statica è incorporata direttamente all’interno di un modulo (EXE o DLL). Una libreria dynamic è un file autonomo.

Una DLL può essere modificata in qualsiasi momento e viene caricata solo in fase di esecuzione quando un EXE carica esplicitamente la DLL. Una libreria statica non può essere modificata una volta che è stata compilata all’interno dell’EXE. Una DLL può essere aggiornata individualmente senza aggiornare lo stesso EXE.

Caricamento di una DLL:

Un programma carica una DLL all’avvio, tramite l’API Win32 LoadLibrary o quando è una dipendenza di un’altra DLL. Un programma utilizza GetProcAddress per caricare una funzione o LoadResource per caricare una risorsa.

Ulteriori letture:

Si prega di controllare MSDN o Wikipedia per ulteriori letture. Anche le fonti di questa risposta.

Cos’è una DLL?

I file DLL sono file binari che possono contenere codice eseguibile e risorse come immagini, ecc. A differenza delle applicazioni, queste non possono essere eseguite direttamente, ma un’applicazione le carica come e quando sono richieste (o tutte in una volta all’avvio).

Sono importanti?

La maggior parte delle applicazioni caricherà i file DLL richiesti all’avvio. Se uno di questi non viene trovato, il sistema non sarà in grado di avviare il processo.

I file DLL potrebbero richiedere altri file DLL

Nello stesso modo in cui un’applicazione richiede un file DLL, un file DLL potrebbe dipendere da altri file DLL. Se uno di questi file DLL nella catena di dipendenza non viene trovato, l’applicazione non verrà caricata. Questo è il debug facilmente utilizzando qualsiasi strumento di dipendenza walker, come Dependency Walker .

Ce ne sono così tanti nelle cartelle di sistema

La maggior parte delle funzionalità del sistema è esposta a un programma utente sotto forma di file DLL poiché sono una forma standard di condivisione di codice / risorse. Ciascuna funzionalità viene tenuta separatamente in diversi file DLL, in modo che vengano caricati solo i file DLL richiesti, riducendo così i vincoli di memoria sul sistema.

Le applicazioni installate utilizzano anche i file DLL

I file DLL diventano anche una forma di separazione delle funzionalità fisicamente come spiegato sopra. Anche le buone applicazioni cercano di non caricare i file DLL finché non sono assolutamente necessari, il che riduce i requisiti di memoria. Anche questo fa sì che le applicazioni vengano spedite con molti file DLL.

DLL Hell

Tuttavia, a volte gli aggiornamenti di sistema spesso interrompono altri programmi in caso di mancata corrispondenza della versione tra i file DLL condivisi e il programma che li richiede. I checkpoint di sistema e la cache DLL, ecc. Sono state le iniziative di M $ per risolvere questo problema. La piattaforma .NET potrebbe non affrontare questo problema.

Come facciamo a sapere cosa c’è dentro un file DLL?

È necessario utilizzare uno strumento esterno come DUMPBIN o Dependency Walker che non solo mostrerà quali funzioni visibili pubblicamente (note come esportazioni) sono contenute nei file DLL e anche quali altri file DLL richiede e quali esporta da tali file DLL questo file DLL dipende da

Come li creiamo / li usiamo?

Fare riferimento alla documentazione di programmazione del fornitore. Per C ++, fare riferimento a LoadLibrary in MSDN.

Diciamo che stai facendo un eseguibile che usa alcune funzioni trovate in una libreria.

Se la libreria che stai usando è statica , il linker copierà il codice object per queste funzioni direttamente dalla libreria e le inserirà nell’eseguibile.

Ora, se questo eseguibile viene eseguito, ha tutto ciò di cui ha bisogno, quindi il loader eseguibile lo carica in memoria e lo esegue.

Se la libreria è dynamic, il linker non inserirà il codice object, ma inserirà uno stub che in pratica dice che questa funzione si trova in questa DLL in questa posizione.

Ora, se questo eseguibile viene eseguito, mancano alcuni bit dell’eseguibile (ovvero gli stub), quindi il loader passa attraverso l’eseguibile che aggiusta gli stub mancanti. Solo dopo che tutti gli stub sono stati risolti sarà permesso all’eseguibile di funzionare.

Per vederlo in azione, cancella o rinomina la DLL e osserva come il loader segnalerà un errore DLL mancante quando tenti di eseguire l’eseguibile.

Da qui il nome Dynamic Link Library , parti del processo di collegamento vengono eseguite dynamicmente in fase di esecuzione dal loader eseguibile.

Una nota finale, se non si collega alla DLL, non verrà inserito alcun stub dal linker, ma Windows fornisce ancora l’API GetProcAddress che consente di caricare un punto di ingresso della funzione DLL dopo l’avvio dell’eseguibile.

I file DLL contengono una tabella di esportazione che è una lista di simboli che possono essere cercati dal programma chiamante. I simboli sono in genere funzioni con la convenzione di chiamata C ( __stcall ). La tabella di esportazione contiene anche l’indirizzo della funzione.

Con queste informazioni, il programma chiamante può quindi chiamare le funzioni all’interno della DLL anche se non ha accesso alla DLL in fase di compilazione.

L’introduzione di librerie di collegamenti dinamici offre ulteriori informazioni.

DLL (librerie di collegamento dinamico) e SL (librerie condivise, equivalenti sotto UNIX) sono solo librerie di codice eseguibile che possono essere collegate dynamicmente in un eseguibile al momento del caricamento.

Le librerie statiche sono inserite in un eseguibile in fase di compilazione e vengono riparate da quel punto. Aumentano le dimensioni dell’eseguibile e non possono essere condivisi.

Le librerie dinamiche hanno i seguenti vantaggi:

1 / Vengono caricati in fase di esecuzione anziché in fase di compilazione in modo che possano essere aggiornati indipendentemente dall’eseguibile (tutte le windows e le windows di dialogo fantasiose visualizzate in Windows provengono da DLL, quindi l’aspetto dell’applicazione può cambiare senza di te dover riscriverlo).

2 / Poiché sono indipendenti, il codice può essere condiviso su più eseguibili: ciò consente di risparmiare memoria poiché, se si eseguono 100 app con una singola DLL, potrebbe essere presente solo una copia della DLL in memoria.

Il loro principale svantaggio è il vantaggio n. 1: il fatto che le DLL cambino in modo indipendente, la tua applicazione potrebbe smettere di funzionare o iniziare a comportarsi in modo bizzarro. Il controllo delle versioni DLL tende a non essere gestito molto bene sotto Windows e questo porta al caratteristico “Hell inferno”.

http://support.microsoft.com/kb/815065

Una DLL è una libreria che contiene codice e dati che possono essere utilizzati da più di un programma allo stesso tempo. Ad esempio, nei sistemi operativi Windows, la DLL Comdlg32 esegue funzioni comuni relative alle windows di dialogo. Pertanto, ogni programma può utilizzare la funzionalità contenuta in questa DLL per implementare una finestra di dialogo Apri. Questo aiuta a promuovere il riutilizzo del codice e l’uso efficiente della memoria.

Usando una DLL, un programma può essere modularizzato in componenti separati. Ad esempio, un programma di contabilità può essere venduto dal modulo. Ogni modulo può essere caricato nel programma principale in fase di esecuzione se tale modulo è installato. Poiché i moduli sono separati, il tempo di caricamento del programma è più veloce e un modulo viene caricato solo quando viene richiesta tale funzionalità.

Inoltre, gli aggiornamenti sono più facili da applicare a ciascun modulo senza influenzare altre parti del programma. Ad esempio, potresti avere un programma di gestione stipendi e le aliquote d’imposta cambiano ogni anno. Quando queste modifiche sono isolate in una DLL, è ansible applicare un aggiornamento senza la necessità di creare o installare nuovamente l’intero programma.

http://en.wikipedia.org/wiki/Dynamic-link_library

DLL è un’estensione di file e nota come formato di file “libreria di collegamento dinamico” utilizzato per contenere più codici e procedure per i programmi Windows. Software e giochi vengono eseguiti sulla base di file DLL; I file DLL sono stati creati in modo che più applicazioni possano utilizzare le loro informazioni contemporaneamente.

Se si desidera ottenere ulteriori informazioni sui file DLL o di fronte a qualsiasi errore leggere il seguente messaggio. https://www.bouncegeek.com/fix-dll-errors-windows-586985/

Le DLL (librerie di collegamento dinamico) contengono risorse utilizzate da una o più applicazioni o servizi. Possono contenere classi, icone, stringhe, oggetti, interfacce e praticamente tutto ciò che uno sviluppatore dovrebbe memorizzare tranne un’interfaccia utente.