279

DLLファイルはどの程度正確に機能しますか?非常に多いようですが、何なのか、どのように機能するのかわかりません。

それで、彼らとの取引は何ですか?

4

9 に答える 9

355

DLLとは何ですか?

ダイナミックリンクライブラリ(DLL)はEXEに似ていますが、直接実行可能ではありません。これらは、Linux/Unixの.soファイルに似ています。つまり、DLLはMSによる共有ライブラリの実装です。

DLLはEXEに非常によく似ているため、ファイル形式自体は同じです。EXEとDLLはどちらも、Portable Executable(PE)ファイル形式に基づいています。DLLには、COMコンポーネントと.NETライブラリを含めることもできます。

DLLには何が含まれていますか?

DLLには、EXEまたは他のDLLが使用する関数、クラス、変数、UI、およびリソース(アイコン、イメージ、ファイルなど)が含まれています。

ライブラリの種類:

事実上すべてのオペレーティングシステムには、2種類のライブラリがあります。静的ライブラリと動的ライブラリ。Windowsでは、ファイル拡張子は次のとおりです。静的ライブラリ(.lib)と動的ライブラリ(.dll)。主な違いは、静的ライブラリがコンパイル時に実行可能ファイルにリンクされることです。一方、ダイナミックリンクライブラリは実行時までリンクされません。

静的および動的ライブラリの詳細:

静的ライブラリはモジュール(EXEまたはDLL)の内部に直接埋め込まれているため、通常、コンピューターには静的ライブラリは表示されません。ダイナミックライブラリはスタンドアロンファイルです。

DLLはいつでも変更でき、EXEがDLLを明示的にロードするときにのみ実行時にロードされます。静的ライブラリは、EXE内でコンパイルされると変更できません。DLLは、EXE自体を更新せずに個別に更新できます。

DLLのロード:

プログラムは、起動時、Win32 API LoadLibraryを介して、または別のDLLの依存関係である場合にDLLをロードします。プログラムは、GetProcAddressを使用して関数をロードするか、LoadResourceを使用してリソースをロードします。

参考文献:

詳細については、 MSDNまたはWikipediaを確認してください。また、この答えの出典。

于 2008-09-23T23:34:19.197 に答える
50

DLL とは何ですか?

DLL ファイルは、実行可能コードとイメージなどのリソースを含むことができるバイナリ ファイルです。アプリケーションとは異なり、これらは直接実行できませんが、アプリケーションは必要に応じて (または起動時に一度に) ロードします。

それらは重要ですか?

ほとんどのアプリケーションは、起動時に必要な DLL ファイルをロードします。これらのいずれかが見つからない場合、システムはプロセスをまったく開始できません。

DLL ファイルには他の DLL ファイルが必要な場合があります

アプリケーションが DLL ファイルを必要とするのと同じように、DLL ファイルは他の DLL ファイル自体に依存している場合があります。依存関係のチェーンでこれらの DLL ファイルのいずれかが見つからない場合、アプリケーションは読み込まれません。これは、 Dependency Walkerなどの任意の依存関係ウォーカー ツールを使用して簡単にデバッグできます。

システムフォルダには非常に多くのものがあります

ほとんどのシステム機能は、DLL ファイルの形式でユーザー プログラムに公開されます。これは、DLL ファイルがコード/リソースを共有する標準的な形式であるためです。各機能は異なる DLL ファイルに個別に保持されるため、必要な DLL ファイルのみがロードされ、システムのメモリの制約が軽減されます。

インストールされたアプリケーションも DLL ファイルを使用します

DLL ファイルも、上記で説明したように、機能を物理的に分離する形式になります。また、優れたアプリケーションは、絶対に必要になるまで DLL ファイルを読み込まないようにします。これにより、メモリ要件が軽減されます。これもまた、アプリケーションが多数の DLL ファイルとともに出荷される原因となります。

DLL地獄

ただし、共有 DLL ファイルとそれらを必要とするプログラムとの間にバージョンの不一致があると、システムのアップグレードによって他のプログラムが破損することがよくあります。システム チェックポイントや DLL キャッシュなどは、この問題を解決するための M$ からの取り組みです。.NET プラットフォームでは、この問題はまったく発生しない可能性があります。

DLL ファイルの内容を知るにはどうすればよいでしょうか。

DUMPBINや Dependency Walkerなどの外部ツールを使用する必要があります。これは、DLL ファイル内に公開されている機能 (エクスポートと呼ばれる) が含まれているだけでなく、必要な他の DLL ファイルと、これらの DLL ファイルからこの DLL ファイルをエクスポートするものも表示します。に依存しています。

それらをどのように作成/使用するのですか?

ベンダーのプログラミング ドキュメントを参照してください。C++ については、MSDN のLoadLibraryを参照してください。

于 2008-09-24T06:05:09.020 に答える
17

ライブラリにあるいくつかの関数を使用する実行可能ファイルを作成しているとしましょう。

使用しているライブラリが静的である場合、リンカはこれらの関数のオブジェクトコードをライブラリから直接コピーし、実行可能ファイルに挿入します。

これで、この実行可能ファイルを実行すると、必要なものがすべて揃っているため、実行可能ローダーはそれをメモリにロードして実行するだけです。

ライブラリがダイナミックの場合、リンカはオブジェクトコードを挿入しませんが、基本的にこの関数がこのDLLのこの場所にあることを示すスタブを挿入します。

この実行可能ファイルを実行すると、実行可能ファイルの一部(つまり、スタブ)が欠落しているため、ローダーは実行可能ファイルを調べて、欠落しているスタブを修正します。すべてのスタブが解決された後でのみ、実行可能ファイルの実行が許可されます。

これが実際に動作していることを確認するには、DLLを削除または名前変更し、実行可能ファイルを実行しようとしたときにローダーが不足しているDLLエラーを報告する方法を確認します。

したがって、ダイナミックリンクライブラリという名前は、実行可能ローダーによって実行時にリンクプロセスの一部が動的に実行されます。

最後に、DLLにリンクしない場合、リンカーによってスタブが挿入されることはありませんが、Windowsには、実行可能ファイルの開始後ずっとDLL関数エントリポイントの実行をロードできるGetProcAddressAPIが用意されています。

于 2008-09-23T23:49:43.153 に答える
14

DLLファイルには、呼び出し側プログラムが検索できるシンボルのリストであるエクスポートテーブルが含まれています。シンボルは通常、C呼び出し規約__stcall)を使用した関数です。エクスポートテーブルには、関数のアドレスも含まれています。

この情報を使用して、呼び出し側プログラムは、コンパイル時にDLLにアクセスできなかった場合でも、DLL内の関数を呼び出すことができます。

ダイナミックリンクライブラリの紹介には、さらにいくつかの情報があります。

于 2008-09-23T23:39:18.963 に答える
14

DLL(ダイナミックリンクライブラリ)とSL(共有ライブラリ、UNIXで同等)は、ロード時に実行可能ファイルに動的にリンクできる実行可能コードのライブラリにすぎません。

静的ライブラリはコンパイル時に実行可能ファイルに挿入され、その時点から修正されます。これらは実行可能ファイルのサイズを大きくし、共有できません。

ダイナミックライブラリには次の利点があります。

1 /コンパイル時ではなく実行時にロードされるため、実行可能ファイルとは関係なく更新できます(Windowsに表示されるすべての凝ったウィンドウとダイアログボックスはDLLからのものであるため、アプリケーションのルックアンドフィールを変更する必要はありません。書き直す必要があります)。

2 /独立しているため、コードを複数の実行可能ファイル間で共有できます。これにより、メモリを節約できます。これは、単一のDLLで100個のアプリを実行している場合、メモリ内にDLLのコピーが1つしかない場合があるためです。

それらの主な欠点は利点#1-アプリケーションに依存せずにDLLを変更すると、アプリケーションが動作を停止したり、奇妙な動作を開始したりする可能性があります。DLLのバージョン管理は、Windowsではうまく管理されない傾向があり、これが古風な名前の「DLLHell」につながります。

于 2008-09-23T23:42:57.363 に答える
8

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

DLL は、同時に複数のプログラムで使用できるコードとデータを含むライブラリです。たとえば、Windows オペレーティング システムでは、Comdlg32 DLL は一般的なダイアログ ボックス関連の機能を実行します。したがって、各プログラムは、この DLL に含まれている機能を使用して、[開く] ダイアログ ボックスを実装できます。これにより、コードの再利用と効率的なメモリ使用が促進されます。

DLL を使用すると、プログラムを個別のコンポーネントにモジュール化できます。たとえば、会計プログラムはモジュールごとに販売される場合があります。モジュールがインストールされている場合、各モジュールは実行時にメイン プログラムにロードできます。モジュールが分離されているため、プログラムのロード時間が短縮され、モジュールはその機能が要求された場合にのみロードされます。

さらに、プログラムの他の部分に影響を与えることなく、更新を各モジュールに簡単に適用できます。たとえば、給与計算プログラムがあり、税率が毎年変わるとします。これらの変更が DLL に分離されると、プログラム全体を再度ビルドまたはインストールしなくても更新を適用できます。

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

于 2008-09-23T23:36:41.357 に答える
3

DLL (ダイナミック リンク ライブラリ) には、1 つ以上のアプリケーションまたはサービスによって使用されるリソースが含まれています。これらには、クラス、アイコン、文字列、オブジェクト、インターフェイス、および UI を除いて開発者が保存する必要があるほとんどすべてのものを含めることができます。

于 2008-09-23T23:36:34.743 に答える
2

マイクロソフトによると

(DLL) ダイナミック リンク ライブラリは、アプリケーションの実行に必要なデータ、コード、またはリソースを含むファイルです。これらは、Windows エコシステムによって作成され、2 つ以上のアプリケーション間で共有できるファイルです。

プログラムまたはソフトウェアが Windows で実行される場合、アプリケーションの動作の多くはプログラムの DLL ファイルに依存します。たとえば、特定のアプリケーションに複数のモジュールがある場合、各モジュールが相互に対話する方法は、Windows DLL ファイルによって決定されます。

詳細な説明が必要な場合は、これらの役立つリソースを確認してください

dll ファイルとは, dll ファイルについて

于 2019-12-17T21:12:06.177 に答える