Dll

dll.png

dllとはなにか

ダイナミック リンク ライブラリ (DLL) は、関数の共有ライブラリとして機能する実行可能ファイル。
動的リンクを利用することによって、プロセスの実行コードに含まれない関数を呼び出すことができる。
関数の実行コードは、実際にその関数を使用するプロセスとは別に、複数の関数をコンパイル、リンクして格納した DLL に収められています。
DLL は、データやリソースの共有にも有効です。
メモリ内の DLL の内容には、複数のアプリケーションが同時にアクセスできます。
動的リンクは、実行モジュール (.dll ファイルまたは .exe ファイル) が使用する DLL 関数のコードの実行時での検索に必要な情報だけを含めることが可能な点で静的リンクと異なります。
静的リンクの場合、リンカは参照される関数全部をスタティック リンク ライブラリから取得し、実行コード内に配置します。
静的リンクの代わりに動的リンクを使うと、いくつかの利点があります。
DLL の利点としては、

  1. メモリの節約
  2. スワップの減少
  3. ディスク領域の節約
  4. アップグレードの簡便化
  5. 製品化後のサポートの提供
  6. MFC ライブラリ クラスを拡張する機構の提供
  7. 多言語プログラムのサポート
  8. 各国対応バージョン作成の容易化

dllが認識される場所

方法1

"%SystemRoot%\System32\" x86 32 bits DLL's
"%SystemRoot%\SysWOW64\" x64 32 bits DLL's
"%SystemRoot%\System32\" x64 64 bits DLL's

方法2

  1. 環境変数PATHにdllの入っているフォルダを指定する。そのあと再起動する。

方法3 プロジェクトやビルドタイプごとに個別のdllを指定する場合

visual Studio 2010より前のバージョンの場合
Visual Studioのプロパティページ

構成プロパティ->VC++ディレクトリ->実行可能ファイルディレクトリ

にパスを渡す
最新のVisual Studio2015ではこの方法ではうまくいかない、困った~

dllが認識される場所

  1. アプリケーション(*.exe)と同じフォルダ
  2. カレントディレクトリ
  3. システムディレクトリ(C:\Windows\System32 など)
  4. 16Bitシステムディレクトリ(C:\Windows\System など)
  5. Windowsディレクトリ(C:\Windows など)
  6. PATH環境変数に列挙されているディレクトリ

Windows が使用する DLL 検索パス

デバッグ用とリリース用のdll

デバッグビルドとリリースビルドで使うdllは違う。
開発するときは面倒だけど、そのつどdllを入れ替えないといけない。

dll解析ソフト

dependency walker…これにdllをつっこめば、どんな関数があるのか解析してくれる。

サポートサイト Wikidot.com