DLLって何ですか?


連載初っ端からDLLの説明です。無謀という説も・・・
ああっ!別のページに移動しないで!!

DLLとはメモリを節約するために考え出された方式で、私の知っている限り古くはOS−9より使われてきました。
Windowsでは、動的にメモリ再配置を行う様に色々と巧みなシステムになっていますが、これを
利用すると色々と便利になってきます。
DLLとは、ダイナミック・リンク・ライブラリの頭文字をとっています。
その名の通り、「実行中に動的にリンクして動くライブラリ」という意味です。

プログラムは、メモリにロードされるものを、ロードモジュールといい、このロードモジュールは
プログラム全てを含んでいる必要があります。
ロードモジュールがメモリにロードされると、実行権利が与えられ、プログラムとして動き始めます。
でも、DLLというテクノロジは、ロードモジュールを複数に分けることが出来るのです。
語弊がありそうな表現ですが、「ようは、メモリ上で揃っていれば良いんだよね?」的な発想ですね!
不条理さえ発生しなければ、いいのです。

プログラムには、大きく分けて「プログラムコード」と「プログラムが利用するデータ領域」に分けられます。
下の図のようなイメージです。

  PROGRAMとは

VCで書かれたプログラムが複数個あったとします。(実際あるのですが・・・)
プログラムには基本時なライブラリがリンクされています。
そのライブラリが全てのプログラムに組み込まれるのは非常に無駄になります。

そこで、VCは基本ライブラリを「MSVCRT(Microsoft VisualC RunTime library)」というDLLに
して、いろんなプログラムからリンクして使えるようにしているのです。

こんな感じ

VCで作ったプログラムは、大体数十キロ〜数百キロの大きさのものがほとんどですが(例外は有りますよ)
それは、基本ライブラリを外に出している(DLLを利用するようになっている)からです。
数十キロのプログラムでも、ライブラリをDLLではなく、プログラムに組み込んでしまうと途端に
フロッピーディスク1枚には入りきらない事になってしまいます。
(その切り分けは、リンクのオプションで変更できます)
BCやDelphi、VBも例外なくこの様になっています。

昔のWindowsには、標準でこのライブラリ(DLL)が標準で入っていなかったため、別途インストールする必要が
ありましたが、最近は標準でインストールされています。
アクティブXというテクノロジも、中身はこのDLLなのです。

プログラムコードは一つにまとめて利用することが出来ますが、データはまとめる訳には行きません。
一つにまとめると、それはそれは大変なことになってしまいます。
Win16(Windows3.1を含めそれ以下のバージョン)では、これで大変な思いをしたプログラマがたくさんいました。
逆に、プロセス間通信を利用しなくても、DLLで橋渡しが簡単に出来ました。
今は、特別な宣言をしなければ、複数DLLから同じエリアを参照できなくなっています。
(OSのモデルを紐解いて見ると、理由は一目瞭然ですが、ここでは割愛します)


さて、これとEmuZ-2000のプラグインとどんな関係が・・・・・(汗
えっと、基本的にはこれまでの話はあまり関係ないです。ごめんなさい。
ここからのDLLの話が、EmuZ-2000が利用しているシステムです。

DLLは、エリアを小さくするために、必要な部分を抜き出してまとめているという話はしました。
これは、利用するプログラムが、利用するときにリンクして実行することになります。
ということは、いつも使うべきではないものも、本体から切り離しておくことが出来ることも意味しています。

後でロードも出来るよ

プログラム本体を拡張しなくても、DLLを利用できるようにしておけば、拡張が容易に行えるようになります。
いろんな市販ソフトやツールの「プラグイン」というのはこのDLLという方式を採用しています。

で、結局何が言いたいかというと、EmuZ-2000のプラグインモジュールも、このDLLという方式を
利用していますって事です。

判りにくいよね、ごめんね。