Voglio sapere la differenza esatta tra il file dll e exe.
Voglio sapere la differenza esatta tra il file dll e exe.
Risposte:
EXE:
DLL:
Per ulteriori dettagli: http://www.c-sharpcorner.com/Interviews/Answer/Answers.aspxQuestionId=1431&MajorCategoryId=1&MinorCategoryId=1 http://wiki.answers.com/Q/What_is_the_difference_between_an_EXE_and_a_DLL
Riferimento: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx
LibMain
funzione.
Non so perché tutti rispondano a questa domanda nel contesto di .NET. La domanda era generale e non menzionava .NET da nessuna parte.
Ebbene, le principali differenze sono:
EXE
DLL
Il formato di file di DLL ed exe è essenzialmente lo stesso. Windows riconosce la differenza tra DLL ed EXE tramite l'intestazione PE nel file. Per i dettagli sull'intestazione PE, puoi dare un'occhiata a questo articolo su MSDN
La differenza è che un EXE ha un punto di ingresso, un metodo "principale" che verrà eseguito durante l'esecuzione.
Il codice all'interno di una DLL deve essere chiamato da un'altra applicazione.
Ci sono alcune altre differenze riguardanti la struttura che potresti menzionare.
Characteristics
parte IMAGE_FILE_HEADER
interna IMAGE_NT_HEADERS
. Per una DLL, ha il IMAGE_FILE_DLL
flag (0x2000) attivato. Per un EXE è il IMAGE_FILE_EXECUTABLE_IMAGE
flag (0x2).IMAGE_OPTIONAL_HEADER
) è il ImageBase
membro. Specifica l'indirizzo virtuale in cui il PE presume che verrà caricato. Se viene caricato in un altro indirizzo, alcuni puntatori potrebbero puntare alla memoria sbagliata. Poiché i file EXE sono tra i primi a essere caricati nel nuovo spazio degli indirizzi, il caricatore di Windows può garantire un indirizzo di caricamento costante e di solito è 0x00400000. Quel lusso non esiste per una DLL. Due file DLL caricati nello stesso processo possono richiedere lo stesso indirizzo. Questo è il motivo per cui una DLL ha un'altra directory di dati chiamata Base Relocation Directory che di solito risiede nella propria sezione - .reloc
. Questa directory contiene un elenco di posizioni nella DLL che devono essere ribasate / corrette in modo che puntino alla memoria corretta. La maggior parte dei file EXE non ha questa directory, ma alcuni vecchi compilatori li generano.Puoi leggere di più su questo argomento @ MSDN .
Questa risposta è stata un po 'più dettagliata di quanto pensassi, ma l'ho letta.
DLL:
nella maggior parte dei casi, un file DLL è una libreria . Esistono un paio di tipi di librerie, dinamiche e statiche: leggi la differenza . DLL sta per libreria di collegamento dinamico che ci dice che fa parte del programma ma non del tutto. È costituito da componenti software riutilizzabili ( libreria ) che potresti utilizzare per più di un singolo programma . Tieni presente che è sempre possibile utilizzare il codice sorgente della libreria in molte applicazioni utilizzando il copia-incolla, ma l'idea di una libreria DLL / statica è che potresti aggiornare il codice di una libreria e allo stesso tempo aggiornare tutte le applicazioni utilizzando it - senza compilare.
Ad esempio:
immagina di creare un componente della GUI di Windows come un pulsante . Nella maggior parte dei casi vorresti riutilizzare il codice che hai scritto perché è un componente complesso ma comune - Vuoi che molte applicazioni lo usino ma non vuoi dare loro il codice sorgente Non puoi copiare -incolla il codice per il pulsante in ogni programma, così decidi di voler creare una libreria DL (DLL) .
Questa libreria di "pulsanti" è richiesta da EXE cutables per funzionare, e senza di essa non funzioneranno perché non sanno come creare il pulsante, ma solo come parlargli.
Allo stesso modo, una DLL non può essere eseguita - esegui, perché è solo una parte del programma ma non ha le informazioni necessarie per creare un "processo" .
EXE:
un eseguibile è il programma . Sa come creare un processo e come dialogare con la DLL. Ha bisogno della DLL per creare un pulsante e senza di essa l'applicazione non viene eseguita - ERRORE.
spero che questo ti aiuti....
using SomeClassFromALibrary
, quella libreria è collegata al progetto tramite una DLL? Sto solo cercando di vedere se sto capendo correttamente
using
per gli spazi dei nomi, non per le classi. L'eccezione è using static
disponibile da c # 6 che importa tutti i membri statici presenti nella classe specificata ( collegamento ). La using
parola chiave promette al compilatore che in fase di esecuzione ci sarà una libreria contenente quello spazio dei nomi . La libreria non è collegata al progetto tramite quella DLL, la DLL è la libreria che è collegata al progetto (assembly). Quella DLL contiene tutto il codice che è stato promesso in fase di compilazione.
Sia DLL che EXE sono formati PE (Portable Executable)
Una libreria a collegamento dinamico (DLL) è una libreria e pertanto non può essere eseguita direttamente. Se si tenta di eseguirlo, verrà visualizzato un errore relativo a un punto di ingresso mancante. Ha bisogno di un punto di ingresso (funzione principale) per essere eseguito, quel punto di ingresso può essere qualsiasi applicazione o exe. Il binding DLL si verifica in fase di esecuzione. Questo è il motivo per cui è chiamata libreria "Dynamic Link".
Un eseguibile (EXE) è un programma che può essere eseguito. Ha il suo punto di ingresso. Un flag all'interno dell'intestazione PE indica il tipo di file che è (irrilevante dell'estensione del file). L'intestazione PE ha un campo in cui risiede il punto di ingresso per il programma. Nelle DLL non viene utilizzato (o almeno non come punto di ingresso).
Sono disponibili molti software per controllare le informazioni di intestazione. L'unica differenza che fa funzionare entrambi in modo diverso è il bit nell'intestazione come mostrato nel diagramma sottostante.
Il file EXE ha solo una singola voce principale significa che è un'applicazione isolata, quando un sistema avvia exe, viene creato un nuovo processo mentre le DLL hanno molti punti di ingresso, quindi quando l'applicazione lo utilizza non viene avviato alcun nuovo processo, la DLL può essere riutilizzata e con versione. La DLL riduce lo spazio di archiviazione poiché diversi programmi possono utilizzare la stessa DLL.
.exe
o .dll
meno importante? È quel flag nell'intestazione che li distingue veramente ... Quindi se creo un exe
e lo nomino tramite l'interazione GUI come a .dll
, ma poi cambio quel flag manualmente, è ancora eseguibile?
Due cose: l'estensione e il flag di intestazione memorizzati nel file.
Entrambi i file sono file PE. Entrambi contengono lo stesso identico layout. Una DLL è una libreria e quindi non può essere eseguita. Se provi a eseguirlo, riceverai un errore su un punto di ingresso mancante. Un EXE è un programma che può essere eseguito. Ha un punto di ingresso. Un flag all'interno dell'intestazione PE indica il tipo di file (irrilevante dell'estensione del file). L'intestazione PE ha un campo in cui risiede il punto di ingresso per il programma. Nelle DLL non viene utilizzato (o almeno non come punto di ingresso).
Una piccola differenza è che nella maggior parte dei casi le DLL hanno una sezione di esportazione in cui vengono esportati i simboli. Gli EXE non dovrebbero mai avere una sezione di esportazione poiché non sono librerie, ma nulla impedisce che ciò accada. Il caricatore Win32 non si preoccupa in alcun modo.
Oltre a questo sono identici. Quindi, in sintesi, gli EXE sono programmi eseguibili mentre le DLL sono librerie caricate in un processo e contengono una sorta di funzionalità utile come sicurezza, accesso al database o qualcosa del genere.
Dll v / s Exe
1) Il file DLL è una libreria di collegamento dinamico che può essere utilizzata nei file exe e in altri file dll.
Il file EXE è un file eseguibile che viene eseguito in un processo separato gestito dal sistema operativo.
2) Le DLL non sono eseguibili direttamente. Sono file separati contenenti funzioni che possono essere chiamate da programmi e altre DLL per eseguire calcoli e funzioni.
Un EXE è un programma che può essere eseguito. Es: programma Windows
3)
DLL di riusabilità : possono essere riutilizzate per altre applicazioni. Fintanto che il programmatore conosce i nomi ei parametri delle funzioni e delle procedure nel file DLL.
EXE: solo per scopi specifici.
4) Una DLL condivide lo stesso processo e lo stesso spazio di memoria dell'applicazione chiamante mentre un
EXE crea il suo processo separato e lo spazio di memoria.
5) Usa
DLL: vuoi che molte applicazioni lo usino ma non vuoi dare loro il codice sorgente Non puoi copiare e incollare il codice per il pulsante in ogni programma, quindi decidi di creare un DL- Libreria (DLL).
EXE: quando lavoriamo con modelli di progetto come applicazioni Windows Form, applicazioni console, applicazioni WPF e servizi Windows, generano un assembly exe quando vengono compilati.
6) Somiglianze:
Sia la DLL che l'EXE sono file binari che hanno una complessa struttura nidificata definita dal formato Portable Executable e non possono essere modificati dagli utenti.
Il .exe è il programma. Il .dll è una libreria in cui può chiamare un .exe (o un altro .dll).
Ciò che sakthivignesh dice può essere vero in quel .exe può usarne un altro come se fosse una libreria, e questo viene fatto (ad esempio) con alcuni componenti COM. In questo caso, lo "slave" .exe è un programma separato (in senso stretto, un processo separato - forse in esecuzione su una macchina separata), ma che accetta e gestisce le richieste da altri programmi / componenti / qualunque cosa.
Tuttavia, se scegli solo un .exe e un .dll casuali da una cartella nei tuoi Programmi, le probabilità sono che COM non sia rilevante: sono solo un programma e le sue librerie collegate dinamicamente.
Utilizzando le API Win32, un programma può caricare e utilizzare una DLL utilizzando le funzioni API LoadLibrary e GetProcAddress, IIRC. C'erano funzioni simili in Win16.
COM è per molti versi un'evoluzione dell'idea di DLL, originariamente concepita come base per OLE2, mentre .NET è il discendente di COM. Le DLL esistono da Windows 1, IIRC. In origine erano un modo per condividere il codice binario (in particolare le API di sistema) tra più programmi in esecuzione al fine di ridurre al minimo l'utilizzo della memoria.
Un EXE è visibile al sistema come un normale eseguibile Win32. Il suo punto di ingresso si riferisce a un piccolo caricatore che inizializza il runtime .NET e gli dice di caricare ed eseguire l'assembly contenuto nell'EXE. Una DLL è visibile al sistema come una DLL Win32 ma molto probabilmente senza punti di ingresso. Il runtime .NET memorizza le informazioni sull'assembly contenuto nella propria intestazione.
dll è una raccolta di funzioni riutilizzabili dove come .exe è un eseguibile che può chiamare queste funzioni
Un exe è un programma eseguibile mentre una DLL è un file che può essere caricato ed eseguito dai programmi in modo dinamico.
● .exe e dll sono le versioni compilate del codice c #, chiamate anche come assembly.
● .exe è un file eseguibile autonomo, il che significa che può essere eseguito direttamente.
● .dll è un componente riutilizzabile che non può essere eseguito direttamente e richiede altri programmi per eseguirlo.
1) DLL è un componente in-process, il che significa che viene eseguito nello stesso spazio di memoria del processo client. EXE è un componente Out-Process, il che significa che viene eseguito nel proprio spazio di memoria separato.
2) La DLL contiene funzioni e procedure che altri programmi possono utilizzare (promuove la riutilizzabilità) mentre EXE non può essere condiviso con altri programmi.
3) Le DLL non possono essere eseguite direttamente poiché sono progettate per essere caricate ed eseguite da altri programmi. EXE è un programma che viene eseguito direttamente.
Per chi cerca una risposta concisa,
Se un assembly viene compilato come libreria di classi e fornisce tipi da utilizzare per altri assembly, ha l'estensione ifle
.dll
(libreria di collegamento dinamico) e non può essere eseguito autonomamente.Allo stesso modo, se un assembly viene compilato come un'applicazione, ha l'estensione di file
.exe
(eseguibile) e può essere eseguito autonomamente. Prima di .NET Core 3.0, le app della console venivano compilate in file .dll e dovevano essere eseguite dal comando dotnet run o da un eseguibile host. - Fonte
La principale differenza esatta tra DLL ed EXE è che DLL non ha un punto di ingresso e EXE. Se hai familiarità con c ++ puoi vedere che build EXE ha la funzione di immissione main () e DLL no :)