dllファイルとexeファイルの正確な違いを知りたい。
dllファイルとexeファイルの正確な違いを知りたい。
回答:
EXE:
DLL:
詳細: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
リファレンス:http : //www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx
LibMain
関数を介して通知を受け取ることができます。
なぜ誰もが.NETのコンテキストでこの質問に答えているのかわかりません。質問は一般的なものであり、.NETについては言及されていません。
主な違いは次のとおりです。
EXE
DLL
DLLとexeのファイル形式は基本的に同じです。Windowsは、ファイルのPEヘッダーを通じてDLLとEXEの違いを認識します。PEヘッダーの詳細については、MSDNのこの記事をご覧ください。
言及できる構造に関しては、さらにいくつかの違いがあります。
Characteristics
メンバーを調べます。DLLの場合、(0x2000)フラグがオンになっています。EXEの場合はIMAGE_FILE_HEADER
IMAGE_NT_HEADERS
IMAGE_FILE_DLL
IMAGE_FILE_EXECUTABLE_IMAGE
(0x2)フラグです。IMAGE_OPTIONAL_HEADER
)にはImageBase
メンバーがあります。これは、PEがロードされると想定する仮想アドレスを指定します。別のアドレスに読み込まれると、一部のポインタが間違ったメモリを指す可能性があります。EXEファイルは最初に新しいアドレススペースにロードされるため、Windowsローダーは一定のロードアドレスを保証できます。これは通常0x00400000です。DLLにはその贅沢はありません。同じプロセスに読み込まれた2つのDLLファイルは、同じアドレスを要求できます。DLLに、通常は独自のセクションにあるBase Relocation Directoryと呼ばれる別のデータディレクトリがある理由.reloc
です。このディレクトリには、正しいメモリを指すようにリベース/パッチを適用する必要があるDLL内の場所のリストが含まれています。ほとんどのEXEファイルにはこのディレクトリがありませんが、一部の古いコンパイラはそれらを生成します。このトピックの詳細については、MSDNを参照してください。
この答えは、私が思ったよりも少し詳細でしたが、読み通しました。
DLL:
ほとんどの場合、DLLファイルはライブラリです。ライブラリには、動的と静的の2種類のタイプがあります- 違いについて読んでください。DLLはダイナミックリンクの略ライブラリ、それはだということを教えてくれるパートプログラムが、のではない全部。再利用可能なソフトウェアコンポーネント(ライブラリ)で構成されており、複数のプログラムで使用できます。。コピーと貼り付けを使用して多くのアプリケーションでライブラリのソースコードを使用することは常に可能ですが、DLL /静的ライブラリの考え方は、ライブラリのコードを更新し、同時にすべてのアプリケーションを更新できることです。それ-コンパイルせずに。
例えば:
ButtonのようなWindows GUIコンポーネントを
作成しているとしましょう。ほとんどの場合、記述したコードは複雑ですが一般的なコンポーネントであるため、再利用する必要があります-多くのアプリケーションで使用したいが、ソースコードを提供したくないコピーできない-ボタンのコードをすべてのプログラムに貼り付けて、DL-Library(DLL)を作成することを決定します。。
この「ボタン」ライブラリはEXEで必要です実行可能ファイルを実行するために必要であり、それがないとボタンの作成方法がわからないため、実行することはできません。
同様に、DLLを実行することはできません。DLLはプログラムの一部であり、「プロセス」を作成するために必要な情報がないためです。
EXE:
実行可能ファイルはプログラムです。プロセスを作成する方法とDLLと通信する方法を知っています。ボタンを作成するにはDLL が必要ですが、それがないとアプリケーションは実行されません-エラー。
お役に立てれば....
using SomeClassFromALibrary
、そのライブラリはDLLを介してプロジェクトにリンクされていますか?私が正しく理解しているかどうかを確認しようとしています
DLLとEXEはどちらもPortable Executable(PE)形式です。
ダイナミックリンクライブラリ(DLL)はライブラリであるため、直接実行することはできません。実行しようとすると、エントリポイントが見つからないというエラーが発生します。実行するにはエントリポイント(メイン関数)が必要です。そのエントリポイントは、任意のアプリケーションまたはexeにすることができます。DLLバインディングは実行時に発生します。これが「ダイナミックリンク」ライブラリと呼ばれる理由です。
AN 実行可能(EXE)は、実行可能なプログラムです。独自のエントリポイントがあります。PEヘッダー内のフラグは、それがどのタイプのファイルかを示します(ファイル拡張子とは関係ありません)。PEヘッダーには、プログラムのエントリポイントが存在するフィールドがあります。DLLでは使用されません(または少なくともエントリポイントとしては使用されません)。
ヘッダー情報をチェックするために利用できる多くのソフトウェアがあります。以下の図に示すように、両方の動作が異なる唯一の違いは、ヘッダーのビットです。
EXEファイルのメインエントリは1つだけであることを意味します。これは、分離されたアプリケーションであることを意味します。システムがexeを起動すると、新しいプロセスが作成されますが、DLLには多くのエントリポイントがあるため、アプリケーションが新しいプロセスを使用しないと、DLLを再利用してバージョン管理できます。異なるプログラムが同じdllを使用できるため、DLLはストレージスペースを削減します。
.exe
か、.dll
問題ではありませんか?それらを本当に区別するのはヘッダーのそのフラグです...それで、私がを作成し、exe
GUIインタラクションを介してとして名前を付けた場合.dll
、そのフラグを手動で変更しても、引き続き実行可能ですか?
2つ:ファイルに保存されている拡張子とヘッダーフラグ。
どちらのファイルもPEファイルです。どちらにもまったく同じレイアウトが含まれています。DLLはライブラリであるため、実行できません。実行しようとすると、エントリポイントが見つからないというエラーが発生します。EXEは実行可能なプログラムです。エントリポイントがあります。PEヘッダー内のフラグは、それがどのファイルタイプであるかを示します(ファイル拡張子とは関係ありません)。PEヘッダーには、プログラムのエントリポイントが存在するフィールドがあります。DLLでは使用されません(または少なくともエントリポイントとしては使用されません)。
1つの小さな違いは、ほとんどの場合、DLLにはシンボルがエクスポートされるエクスポートセクションがあることです。EXEはライブラリではないため、エクスポートセクションを含めることはできませんが、それが発生するのを妨げるものはありません。Win32ローダーはどちらの方法でもかまいません。
それ以外は同じです。つまり、要約すると、EXEは実行可能プログラムであり、DLLはプロセスにロードされるライブラリであり、セキュリティ、データベースアクセスなどの便利な機能が含まれています。
DLL v / sエグゼ
1)DLLファイルは、exeファイルやその他のdllファイルで使用できるダイナミックリンクライブラリです。
EXEファイルは、OSによって管理される別のプロセスで実行される実行可能ファイルです。
2)DLLは直接実行できません。これらは、プログラムや他のDLLが呼び出して計算や関数を実行できる関数を含む個別のファイルです。
EXEは実行可能なプログラムです。例:Windowsプログラム
3)再利用
DLL:他のアプリケーションで再利用できます。コーダーがDLLファイル内の関数とプロシージャの名前とパラメータを知っている限り。
EXE:特定の目的のみ。
4)DLLは呼び出し側アプリケーションと同じプロセスとメモリ空間を共有しますが、
EXEは個別のプロセスとメモリ空間を作成します。
5)
DLLを使用する:多くのアプリケーションで使用したいが、ソースコードを提供したくないすべてのプログラムでボタンのコードをコピーして貼り付けることはできないため、DL-を作成することにします。ライブラリ(DLL)。
EXE:Windowsフォームアプリケーション、コンソールアプリケーション、WPFアプリケーション、Windowsサービスなどのプロジェクトテンプレートを使用すると、コンパイル時にexeアセンブリが生成されます。
6)類似性:
DLLとEXEはどちらもバイナリファイルで、ポータブル実行可能形式で定義された複雑な入れ子構造になっており、ユーザーが編集できるようには設計されていません。
.exeがプログラムです。.dllは、.exe(または別の.dll)が呼び出すライブラリです。
ある.exeが別の.exeをライブラリのように使用できるという点でsakthivigneshの言うことが当てはまる可能性があり、これは(たとえば)一部のCOMコンポーネントで行われます。この場合、「スレーブ」の.exeは別のプログラム(厳密には別のプロセス-おそらく別のマシンで実行されています)ですが、他のプログラム/コンポーネント/その他からの要求を受け入れて処理するものです。
ただし、Program Filesのフォルダーからランダムな.exeと.dllを選択するだけの場合、COMは関連性がない可能性があります。これらは単なるプログラムとその動的リンクライブラリです。
Win32 APIを使用すると、プログラムはLoadLibraryおよびGetProcAddress API関数、IIRCを使用してDLLをロードして使用できます。Win16にも同様の機能がありました。
COMは多くの点でDLLのアイデアを発展させたものであり、もともとはOLE2の基礎として考えられていましたが、.NETはCOMの子孫です。DLLは、Windows 1、IIRCから存在しています。もともとは、メモリの使用を最小限に抑えるために、実行中の複数のプログラム間でバイナリコード(特にシステムAPI)を共有する方法でした。
EXEは、通常のWin32実行可能ファイルとしてシステムに表示されます。そのエントリポイントは、.NETランタイムを初期化し、EXEに含まれるアセンブリをロードして実行するように指示する小さなローダーを参照します。DLLはシステムからWin32 DLLとして認識されますが、ほとんどの場合、エントリポイントはありません。.NETランタイムは、含まれているアセンブリに関する情報を独自のヘッダーに格納します。
dllは再利用可能な関数のコレクションで、.exeはこれらの関数を呼び出す実行可能ファイルです。
exeは実行可能なプログラムですが、DLLはプログラムによって動的にロードおよび実行できるファイルです。
簡潔な答えを探している人のために、
DLLとEXEの主な正確な違いは、DLLにはエントリポイントがなく、EXEにはあります。C ++に精通している場合は、ビルドEXEにmain()エントリ関数があり、DLLにはないことがわかります:)