web-dev-qa-db-ja.com

.dllと.exeの違いは?

Dllファイルとexeファイルの正確な違いを知りたい。

85
Umesh Aawte

EXE:

  1. 実行可能ファイルです
  2. 実行可能ファイルをロードする場合、エクスポートは呼び出されず、モジュールエントリポイントのみが呼び出されます。
  3. システムが新しい実行可能ファイルを起動すると、新しいプロセスが作成されます
  4. エントリスレッドは、そのプロセスのメインスレッドのコンテキストで呼び出されます。

DLL:

  1. ダイナミックリンクライブラリです
  2. エクスポートされたシンボルは複数あります。
  3. システムはDLL=を既存のプロセスのコンテキストにロードします。

詳細: http://www.c-sharpcorner.com/Interviews/Answer/Answers.aspxQuestionId=1431&MajorCategoryId=1&MinorCategoryId=1http://wiki.answers.com/ Q/What_is_the_difference_between_an_EXE_and_a_DLL

参照: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx

68
firstthumb

誰もが.NETのコンテキストでこの質問に答えている理由はわかりません。質問は一般的なものであり、.NETについては言及していませんでした。

さて、主な違いは次のとおりです。

[〜#〜] exe [〜#〜]

  1. Exeは常に独自のアドレス空間で実行されます。つまり、別のプロセスです。
  2. EXEの目的は、独自の別のアプリケーションを起動することです。

[〜#〜] dll [〜#〜]

  1. Dllを実行するには、常にホストexeが必要です。つまり、独自のアドレス空間で実行することはできません。
  2. DLLの目的は、他のアプリケーションから再利用できるメソッド/クラスのコレクションを持つことです。
  3. DLLは、Microsoftの共有ライブラリの実装です。

DLLとexeのファイル形式は基本的に同じです。Windowsは、ファイル内のPEヘッダーを介してDLLとEXEの違いを認識します。PEヘッダーの詳細については、 、 MSDNでこの記事を見ることができます

121
Aamir

違いは、EXEにはエントリポイント、つまり実行時に実行される「メイン」メソッドがあることです。

DLL=内のコードは、別のアプリケーションから呼び出す必要があります。

28
Robin Day

言及できる構造に関して、さらにいくつかの違いがあります。

  1. 両方のDLLとEXEは同じファイル構造-Portable Executable、またはPEを共有します。2つを区別するには、IMAGE_FILE_HEADERCharacteristicsメンバーを調べます。 IMAGE_NT_HEADERS。DLLの場合、IMAGE_FILE_DLL(0x2000)フラグがオンになり、EXEの場合、IMAGE_FILE_EXECUTABLE_IMAGE(0x2)フラグになります。
  2. PEファイルは、いくつかのヘッダーといくつかのセクションで構成されています。通常、コードのセクション、データのセクション、インポートされた関数をリストするセクション、およびリソースのセクションがあります。一部のセクションには、複数のものが含まれる場合があります。ヘッダーには、セクションにあるデータディレクトリのリストも記述されています。これらのデータディレクトリにより、WindowsはPEで必要なものを見つけることができます。ただし、EXEが決して持たないデータディレクトリの種類の1つは(frankenstein EXEを作成している場合を除き)エクスポートディレクトリです。ここでDLL=ファイルにはエクスポートする関数のリストがあり、他のEXEまたはDLLファイル。反対側では、各DLLおよびEXEには、実行に必要な関数とDLLファイルをリストするインポートディレクトリがあります。
  3. また、PEヘッダー(IMAGE_OPTIONAL_HEADER)にはImageBaseメンバーがあります。 PEがロードされると想定する仮想アドレスを指定します。別のアドレスにロードされている場合、一部のポインターが誤ったメモリーを指している可能性があります。 EXEファイルは新しいアドレススペースに最初にロードされるため、Windowsローダーは一定のロードアドレスを保証でき、通常は0x00400000です。 DLLにはその贅沢はありません。 2つのDLL同じプロセスに読み込まれたファイルは同じアドレスを要求できます。これがDLLに通常存在するBase Relocation Directoryと呼ばれる別のデータディレクトリを持っている理由です。独自のセクション-.reloc。このディレクトリには、DLL)内の場所のリストが含まれており、適切なメモリを指すようにリベース/パッチを適用する必要があります。 tこのディレクトリはありますが、古いコンパイラーはそれらを生成します。

このトピックの詳細については、@ [〜#〜] msdn [〜#〜] を参照してください。

25
kichik

この答えは、私が思っていたよりももう少し詳細でしたが、読んでみました。

DLL:
ほとんどの場合、DLLファイルはlibraryです。動的ライブラリと静的ライブラリにはいくつかのタイプがあります- 読み取り違いについて 。DLLは dynamic linklibrary を意味します)プログラムのpartであるが、not全体ではないこと。再利用可能なソフトウェアコンポーネントで構成されている( library )これは1つ以上のプログラムに使用できます。コピーアンドペーストを使用する多くのアプリケーションでライブラリソースコードを使用することは常に可能ですが、DLL /静的ライブラリとは、コンパイルせずにライブラリのコードを更新すると同時に、それを使用するすべてのアプリケーションを更新できることです。

例:
あなたが Windows GUIコンポーネントボタンを作成していると想像してください。ほとんどの場合、複雑であるがcommonコンポーネントであるため、作成したコードを再利用したいと思います-多くのアプリケーションで使用したいが、それらを与えたくないソースコードすべてのプログラムでボタンのコードをコピーして貼り付けることはできないため、 DL-Library(DLL) を作成することにします。

この"button"ライブラリは、[〜#〜] exe [〜#〜]cutablesが必要であり、ボタンを作成する方法がわからないため、実行することはできません。

同様に、DLLは実行できません。プログラムの一部にすぎませんが、 "プロセス" を作成するために必要な情報がないため、実行できます。

EXE:
実行可能ファイルはプログラムです。 process の作成方法とDLLとの通信方法を知っています。それ必要 DLL=ボタンを作成し、それなしではアプリケーションは実行されません-エラー。

お役に立てれば....

19
hannson

DLLとEXEは両方とも Portable Executable(PE)Formats

ダイナミックリンクライブラリ(DLL)はライブラリであるため、直接実行することはできません。実行しようとすると、エントリポイントが見つからないというエラーが表示されます。実行するには、エントリポイント(メイン関数)が必要です。そのエントリポイントは、任意のアプリケーションまたはexeです。 DLLバインディングは実行時に発生します。それが「ダイナミックリンク」ライブラリと呼ばれる理由です。

実行可能(EXE)は実行可能なプログラムです。独自のエントリポイントがあります。 PEヘッダー内のフラグは、それがどのタイプのファイルであるかを示します(ファイル拡張子とは無関係)。 PEヘッダーには、プログラムのエントリポイントが存在するフィールドがあります。 DLLでは使用されません(少なくともエントリポイントとしては使用されません)。

多くの software があり、ヘッダー情報を確認できます。両方の動作が異なる唯一の違いは、次の図に示すようにヘッダーのビットです。

header

EXEファイルにはメインエントリが1つしかないため、システムがexeを起動すると新しいプロセスが作成され、DLLには多くのエントリポイントがあるため、アプリケーションを使用すると新しいプロセスは開始されず、DLLを再利用できますおよびバージョン管理。 DLLは、異なるプログラムが同じdllを使用できるため、ストレージスペースを削減します。

14
Zaheer Ahmed

DLL v/sエグゼ

1)DLLファイルは、exeファイルおよびその他のdllファイルで使用できるダイナミックリンクライブラリです。
EXEファイルは、OSによって管理される別のプロセスで実行される実行可能ファイルです。

2)DLLは直接実行できません。これらは、計算や機能を実行するためにプログラムやその他のDLLから呼び出すことができる機能を含む個別のファイルです。
EXEは、実行可能なプログラムです。例:Windowsプログラム

3)再利用性
DLL:他のアプリケーションで再利用できます。コーダーがDLLファイル内の関数とプロシージャの名前とパラメーターを知っている限り。
EXE:特定の目的のみ。

4)DLLは、呼び出し元アプリケーションと同じプロセスとメモリ空間を共有しますが、
EXEは、個別のプロセスとメモリ空間を作成します。

5)用途
DLL:多くのアプリケーションで使用したいが、ソースコードを提供したくないすべてのプログラムでボタンのコードをコピーして貼り付けることはできないため、 DL-Library(DLL)。

EXE:Windowsフォームアプリケーション、コンソールアプリケーション、WPFアプリケーション、Windowsサービスなどのプロジェクトテンプレートを使用すると、コンパイル時にexeアセンブリが生成されます。

6)類似点:
DLLとEXEは両方とも、Portable Executable形式で定義された複雑なネスト構造を持ち、ユーザーが編集できるようには意図されていません。

4
skanda93

2つのこと:ファイルに保存されている拡張子とヘッダーフラグ。

両方のファイルはPEファイルです。両方ともまったく同じレイアウトを含んでいます。 A DLLはライブラリであるため、実行できません。実行しようとすると、エントリポイントが見つからないというエラーが表示されます。EXEは実行可能なプログラムです。 PEヘッダー内のフラグは、それがどのファイルタイプであるかを示します(ファイル拡張子とは無関係です)。PEヘッダーには、プログラムのエントリポイントが存在するフィールドがあります。エントリポイントとしてではありません)。

1つの小さな違いは、ほとんどの場合、 DLLs にはシンボルがエクスポートされるエクスポートセクションがあります。 EXEはライブラリではないため、エクスポートセクションはありませんが、それを妨げるものはありません。 Win32ローダーはどちらの方法でもかまいません。

それ以外は同じです。したがって、要約すると、EXEは実行可能プログラムであり、DLLはプロセスにロードされるライブラリであり、セキュリティ、データベースアクセスなどの有用な機能が含まれています。

3
judy smith

EXEは、通常のWin32実行可能ファイルとしてシステムに表示されます。そのエントリポイントは、.NETランタイムを初期化し、EXEに含まれるアセンブリをロードして実行するように指示する小さなローダーを参照します。 DLLはWin32 DLLとしてシステムに表示されますが、ほとんどの場合、エントリポイントがありません。NETランタイムは、含まれているアセンブリに関する情報を独自に保存します。ヘッダ。

dllは再利用可能な関数のコレクションで、.exeはこれらの関数を呼び出す実行可能ファイルです

2
rahul

.exeはプログラムです。 .dllは、.exe(または別の.dll)が呼び出すことができるライブラリです。

Sakthivigneshが言うことは、ある.exeが別のライブラリをあたかもライブラリであるかのように使用でき、これが(たとえば)いくつかのCOMコンポーネントで行われるという点で真実です。この場合、「スレーブ」.exeは別個のプログラム(厳密には、別個のプロセス-おそらく別個のマシンで実行されます)ですが、他のプログラム/コンポーネント/その他からの要求を受け入れて処理します。

ただし、プログラムファイル内のフォルダーからランダムな.exeと.dllを選択するだけの場合、COMは関係ない-単なるプログラムとその動的にリンクされたライブラリーである可能性があります。

Win32 APIを使用すると、プログラムはLoadLibraryおよびGetProcAddress API関数、IIRCを使用してDLLをロードおよび使用できます。Win16にも同様の関数がありました。

COMは多くの点で、DLLアイデアの進化版であり、元々はOLE2の基盤として考えられていましたが、.NETはCOMの子孫です。DLLはWindows 1、IIRCから存在していました。もともとは、メモリ使用を最小限に抑えるために、実行中の複数のプログラム間でバイナリコード(特にシステムAPI)を共有する方法です。

1
Steve314

●.exeおよびdllは、アセンブリとも呼ばれるコンパイル済みバージョンのc#コードです。

●.exeはスタンドアロンの実行可能ファイルです。つまり、直接実行できます。

●.dllは再利用可能なコンポーネントであり、直接実行することはできず、実行するには他のプログラムが必要です。

1
Kedarnath M S

Exeは実行可能なプログラムですが、A DLLはプログラムによって動的にロードおよび実行できるファイルです。

0

DLLとEXEの違い:

1)DLLは、クライアントプロセスと同じメモリスペースで実行されるインプロセスコンポーネントです。EXEは、独自のメモリスペースで実行されるアウトプロセスコンポーネントです。

2)DLLには、他のプログラムが使用できる関数とプロシージャが含まれています(再利用可能性を促進します)が、EXEは他のプログラムと共有できません。

3)DLLは、他のプログラムによってロードおよび実行されるように設計されているため、直接実行することはできません。EXEは直接実行されるプログラムです。

0
rahul sharma