web-dev-qa-db-ja.com

dllとは何ですか?

これは非常にヌービーな質問かもしれませんが、今日のWebアプリ開発の世界では、多くのプログラマーはdllをあまり扱う必要がないので、自分の目的について学ぶことを気にしません。

それでは、dllとは何ですか?

  1. それは何のために使われますか?
  2. どのように機能しますか?
  3. どのように作成しますか?
  4. どのような状況で適切なものを作成していますか?

Dllは関数のライブラリを格納するために使用されると言われましたが、それ以上はあまり知りません。うまくいけば、ここの誰かが私を啓発して、最終的に私のWindowsディレクトリ内のすべての.dllファイルが何をしているのか疑問に思うことができます。

84
Daniel

DLLはダイナミックリンクライブラリです。複数のアプリケーション(または他のライブラリ/モジュール)で使用される可能性のあるコードやデータのコレクションです。

そのため、たとえば、ファイルを処理したり、GUIコンポーネントを操作したりする一般的な方法がライブラリで利用できるようになっているため、複数のアプリケーションが同じ機能を使用できます。これにより、同じものを複数回作成する必要が減るだけでなく、たとえば共通ダイアログはアプリケーション間で同じです。

ライブラリは実行時にロードできるため、異なる並行アプリケーション間で共有できます。これは動的リンクと呼ばれます。

場合によっては、ライブラリをアプリケーション自体に含めることができます。これは、静的リンクと呼ばれます。静的リンクは、異なるアプリケーションがそれぞれ同じDLLのコピーをロードするため、柔軟性を犠牲にして展開を容易にします。

ただし、静的リンクは常にオプションとは限りません。例えば。 .NETアプリケーションを静的にリンクすることはできません。ユーザーは、.NETアプリケーションを実行するために.NETライブラリを所有している必要があり、ライブラリ(または.NETで呼び出されるアセンブリ)は実行時にロードされます。

DLLは、アプリケーションの作成に使用したのと同じツールによって作成されます。具体的な詳細は、使用するツールに大きく依存します。

52
Brian Rasmussen

DLL =ダイナミックリンクライブラリ

名前は、実際に彼らが達成することを非常に記述しています。

ライブラリ

特定の問題ドメインのコードを単一の場所に分離できます。次に、これを複数のアプリケーション間で共有します。ライブラリはいつでも交換して、バグを修正したり機能を追加したりできます。

リンク

ライブラリ内のロジックがアプリケーションに直接コンパイルされないように、ライブラリをアプリケーションに「リンク」できます。

動的

ライブラリはオンデマンドでロードできます。 OSは、巨大な単一のEXEをメモリにロードする代わりに、必要な部分のみをロードできます。さらに、DLL=がアプリケーション間で共有されている場合、OSはライブラリのロード方法を最適化し、アプリ間で共有することができます。

26
Paul Alexander

DLL(ダイナミックリンクライブラリ) ファイルは、小さな「サブプログラム」として記述できます。これは、より大きなプログラムを適切に実行するためのものです。これらは、「実行時セッションのさまざまな時点で」さまざまなハードウェアおよびソフトウェアリソースを、「必要に応じて」ベースで、ベースとなるメインの実行可能プログラムにリンクする手段を提供します。これにより、プログラムの最初の実行時に、メインの実行可能プログラムで実行するすべてをコンピューターのRAM(ランダムアクセスメモリ)にロードする必要がなくなります。

DLLによって運ばれるソフトウェアリソースには、プログラムの実行を維持するために実際に必要ではないさまざまなプログラム関数のコードが含まれます。つまり、特定のコンピューティングセッション中の特定の時間にのみ呼び出される必要があり、実際には必要さえない関数まったく呼び出されます。プログラムが最初に実行され、セッション中にそれらを保持することは、コンピューターのRAMにこれらの関数(および特定のプログラムに対してかなりの数になる可能性があります)をロードすることは無駄です。 RAMスペース-プレミアムと見なされます。

大きな進歩:

DLLの開発はコンピューティングの大きな進歩でした。DLLが利用可能になる前は、プログラムに関係するすべて(使用されることはほとんどなかった関数を含む)をRAM whenプログラムが最初にロードされたため、さまざまなプログラムの速度が遅くなり、非常に効率の悪いコンピューティングにつながりました。また、RAMに負担がかかるため、いくつかの単純なプログラムを実行するだけでもマルチタスクが非常に困難でした。

考慮事項:

DLLは通常、バージョン固有です。たとえば、プログラムのバージョン1(または場合によってはプログラミング言語)で適切に機能するものは、バージョン2ではうまく機能しない可能性があります。一般的なルールは、古いバージョンのDLLは機能しない傾向があることです。新しいバージョンではうまくいきますが、新しいバージョンのものは一般に古いバージョンのプログラムまたはプログラミング言語で非常にうまく機能します。

9
judy smith

動的にリンクされたライブラリ。

例として、他の誰かのDLLがアプリケーションにロードされている場合は、そこからプログラミングのビットを使用できます。

常に「5」などで始まる乱数を生成するDLLをロードできます。

あなたのプログラムでは、CrazyDLL.GenerateRandomNumbersSorta()を呼び出すことができ、それは番号を返します。

実世界の例では、DLL 4つのテキストボックスを組み合わせて(これらを使用してIPアドレスを入力します)、自動的に256未満の数字のみを受け入れ、バックスペースキーを押して前のテキストボックスにジャンプします。

私はそのコードでDLLを作成しました、そして今私がしなければならないのは、そのすべてのコードを何度も複製することなく、それらのIPアドレステキストボックスコレクションをドラッグアンドドロップすることです。

同じDLLは、IPアドレスを16進文字列に変換する機能、およびその他の便利なコードも備えています。

6
Grant

MSDNライブラリ から:

ダイナミックリンクライブラリ(DLL)は、別のモジュール(アプリケーションまたはDLL)で使用できる関数とデータを含むモジュールです。

1

DLL =動的 負荷 リンクライブラリ。お伝えしたように、これは基本的に関数、C++クラス、および/またはグローバル変数のコレクションです。 DLL=を静的に(つまり、プログラムの起動時にOSが自動的にロードする)または動的に(プログラムが明示的にロードする)ロードできます。この時点でDLLはプログラムで利用可能です。

作成はEXEの作成と似ていますが、main()関数が必要ない点が異なります。 EXEではなくDLLを作成するようにリンカに指示するリンカディレクティブがあります。

これを行う主な理由は、コードを1か所にカプセル化して、複数のexeから使用することであり、それぞれにコードをリンクすることではありません。

多少歴史的な理由は、コードの一部が物理的に別のファイルにあるため、exeが小さくなる可能性があることです。これは、exeによってメモリ内で占有されるスペースの量が少なくなる可能性があることを意味します。最新のシステムでは、これは以前ほど問題ではありませんが、Windows Mobileでは依然として問題になる可能性があります。

1
Graeme Perrow