Domanda

Voglio sapere la differenza esatta tra il file dll ed exe.

È stato utile?

Soluzione

EXE:

  1. È un file eseguibile
  2. Quando si carica un eseguibile, non viene chiamata esportazione, ma solo il punto di ingresso del modulo.
  3. Quando un sistema avvia un nuovo eseguibile, viene creato un nuovo processo
  4. Il thread della voce viene chiamato nel contesto del thread principale di quel processo.

DLL:

  1. È una libreria di collegamento dinamico
  2. Esistono più simboli esportati.
  3. Il sistema carica una DLL nel contesto di un processo esistente.

Per maggiori 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-Che-differenza-tra-dll-exe.aspx

Altri suggerimenti

Non so perché tutti stiano rispondendo a questa domanda nel contesto di .NET. La domanda era generale e non menzionava .NET da nessuna parte.

Bene, le differenze principali sono:

EXE

  1. Un exe viene sempre eseguito nel proprio spazio di indirizzi, ovvero è un processo separato.
  2. Lo scopo di un EXE è di lanciare una propria applicazione separata.

DLL

  1. Una dll ha sempre bisogno di un exe host per funzionare. cioè, non può mai funzionare nel proprio spazio di indirizzi.
  2. Lo scopo di una DLL è di avere una raccolta di metodi / classi che possono essere riutilizzati da qualche altra applicazione.
  3. DLL è l'implementazione di Microsoft di una libreria condivisa.

Il formato file di DLL ed exe è essenzialmente lo stesso. Windows riconosce la differenza tra DLL ed EXE attraverso l'intestazione PE nel file. Per i dettagli dell'intestazione PE, Puoi leggere questo articolo su MSDN

La differenza è che un EXE ha un punto di ingresso, un "principale" metodo che verrà eseguito in fase di esecuzione.

Il codice all'interno di una DLL deve essere chiamato da un'altra applicazione.

Ci sono alcune differenze in più riguardo alla struttura che potresti menzionare.

  1. Sia DLL che EXE condividono la stessa struttura di file - Portable Executable o PE. Per distinguere tra i due, si può guardare nel membro Caratteristiche di IMAGE_FILE_HEADER all'interno di IMAGE_NT_HEADERS . Per una DLL, è attivato il flag IMAGE_FILE_DLL (0x2000). Per un EXE è il flag IMAGE_FILE_EXECUTABLE_IMAGE (0x2).
  2. I file PE sono costituiti da alcune intestazioni e da un numero di sezioni. Di solito c'è una sezione per il codice, una sezione per i dati, una sezione che elenca le funzioni importate e una sezione per le risorse. Alcune sezioni possono contenere più di una cosa. L'intestazione descrive anche un elenco di directory di dati che si trovano nelle sezioni. Queste directory di dati sono ciò che consente a Windows di trovare ciò di cui ha bisogno in PE. Ma un tipo di directory di dati che un EXE non avrà mai (a meno che non si stia creando un EXE Frankenstein) è la directory di esportazione. Qui è dove i file DLL hanno un elenco di funzioni che esportano e possono essere utilizzati da altri file EXE o DLL. Dall'altro lato, ogni DLL ed EXE ha una directory di importazione in cui sono elencate le funzioni e i file DLL necessari per l'esecuzione.
  3. Anche nelle intestazioni PE ( IMAGE_OPTIONAL_HEADER ) è presente il membro ImageBase . Specifica l'indirizzo virtuale in cui il PE presuppone che verrà caricato. Se viene caricato in un altro indirizzo, alcuni puntatori potrebbero puntare alla memoria errata. Poiché i file EXE sono tra i primi ad essere caricati nel loro nuovo spazio di indirizzi, il caricatore di Windows può assicurare un indirizzo di carico 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 ridisegnate / patchate in modo che puntino alla memoria giusta. 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 leggendola.

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 link dinamico libreria che ci dice che è una parte del programma ma non il tutto. È composto da componenti software riutilizzabili ( library ) che puoi utilizzare per più di un singolo programma . Tieni presente che è sempre possibile utilizzare il codice sorgente della libreria in molte applicazioni usando copia-incolla, ma l'idea di una DLL / libreria statica è che puoi aggiornare il codice di una libreria e allo stesso tempo aggiornare tutte le applicazioni usando esso - senza compilare.

Ad esempio:
Immagina di creare un componente 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 utilizzino ma non vuoi dare loro il codice sorgente Non è possibile copiare e incollare il codice per il pulsante in ogni programma, quindi si decide di creare un DL-Library (DLL) .

Questa libreria " pulsante " è richiesta per l'esecuzione dei cutable EXE e senza di essa non funzioneranno perché non sanno come creare il pulsante, solo come parlarci.

Allo stesso modo, non è possibile eseguire una DLL - eseguire, poiché è solo una parte del programma ma non dispone delle informazioni necessarie per creare un " process " .

EXE:
Un eseguibile è il programma . Sa come creare un process e come parlare con la DLL. richiede la DLL per creare un pulsante, e senza di essa l'applicazione non viene eseguita - ERRORE.

spero che questo aiuti ....

Sia DLL che EXE sono Formati eseguibili portatili (PE)

Una Libreria a collegamento dinamico (DLL) è una libreria e quindi 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. L'associazione DLL si verifica in fase di esecuzione. Ecco perché si chiama " Dynamic Link " biblioteca.

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 (irrilevante per l'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).

Esistono molti software disponibili per controllare le informazioni dell'intestazione. L'unica differenza che fa funzionare entrambi in modo diverso è il bit nell'intestazione, come mostrato nel diagramma seguente.

  

header

Il file EXE ha una sola 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 versionata. DLL riduce lo spazio di archiviazione poiché diversi programmi possono utilizzare la stessa dll.

Dll v / s Exe

1) Il file DLL è una libreria a collegamento dinamico che può essere utilizzata in file exe e altri file dll.
  Il file EXE è un file eseguibile che viene eseguito in modo separato processo 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) Riutilizzabilità
DLL: possono essere riutilizzati per qualche altra applicazione. Finché il programmatore conosce i nomi e i parametri delle funzioni e delle procedure nel file DLL.
EXE: solo per scopi specifici.

4) Una DLL condividerebbe 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) Utilizza
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 una DL-Library (DLL ).

EXE: quando lavoriamo con modelli di progetto come Applicazioni Windows Form, Applicazioni Console, Applicazioni WPF e Servizi Windows generano un assembly exe una volta compilato.

6) Somiglianze:
Sia DLL che EXE sono file binari con una struttura nidificata complessa definita dal formato eseguibile portatile e non sono pensati per essere modificabili dagli utenti.

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 pertanto non può essere eseguita. Se si tenta di eseguirlo, verrà visualizzato un errore relativo a 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 per l'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 differenza minore è che nella maggior parte dei casi 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 importa in entrambi i modi.

A parte 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.

Un EXE è visibile al sistema come un normale eseguibile Win32. La sua entrata punto si riferisce a un piccolo caricatore che inizializza il runtime .NET e dice per caricare ed eseguire l'assemblaggio contenuto nel file EXE. Una DLL è visibile al sistema come una DLL Win32 ma molto probabilmente senza Punti di ingresso. Il runtime .NET memorizza informazioni sul contenuto assembly nella propria intestazione.

  

dll è una raccolta di riutilizzabili   funzioni dove come .exe è un   eseguibile che può chiamarli   funzioni

.exe è il programma. Il .dll è una libreria che può chiamare un .exe (o un altro .dll).

Ciò che sakthivignesh dice può essere vero in quanto un .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 (a rigor di termini, un processo separato - forse in esecuzione su una macchina separata), ma uno che accetta e gestisce le richieste da altri programmi / componenti / qualunque cosa.

Tuttavia, se scegli semplicemente un .exe e .dll casuali da una cartella nei tuoi file di programma, 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 DLL, inizialmente concepita come base per OLE2, mentre .NET è il discendente di COM. Le DLL sono in circolazione da Windows 1, IIRC. Inizialmente 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'uso della memoria.

& # 9679; .exe e dll sono la versione compilata del codice c # che sono anche chiamati come assiemi.

& # 9679; .exe è un file eseguibile autonomo, il che significa che può essere eseguito direttamente.

& # 9679; .dll è un componente riutilizzabile che non può essere eseguito direttamente e richiede altri programmi per eseguirlo.

Un exe è un programma eseguibile mentre una DLL è un file che può essere caricato ed eseguito in modo dinamico dai programmi.

Differenza in DLL ed EXE:

1) DLL è un componente in-process che significa che è in esecuzione nello stesso spazio di memoria del processo client. EXE è un componente out-process, il che significa che viene eseguito nel suo spazio di memoria separato.

2) La DLL contiene funzioni e procedure che altri programmi possono usare (promuove la reuabilità) mentre EXE non può essere condiviso con altri programmi.

3) La DLL non può essere eseguita direttamente in quanto progettata per essere caricata ed eseguita da altri programmi. EXE è un programma che viene eseguito direttamente.

La principale differenza esatta tra DLL ed EXE che DLL non ha un punto di ingresso e EXE lo fa. Se hai familiarità con c ++ puoi vedere che build EXE ha la funzione entry () entry e DLL no :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top