大網白里ジオソフトTOP > 製品紹介 > 使用できるOS環境について > DLL のバージョン問題

DLL のバージョン問題


DLLというのは、プログラムを作るための部品です。
プログラムの部品であるDLLにもバージョンがあります。
古いバージョンの部品から、新しいバージョンの部品に切り換えるとき、 前の機能が100%そのまま使えて、 かつ、それ以外の新機能も使えるようなバージョン・アップが常に行なわれていれば、 常に最新バージョンの部品で作業していて何の問題も発生しないはずです。
DLLは、このような設計思想に基づいて作られているはずです。
しかし、実際には、不完全なバージョン・アップが行なわれて、 そのために若干の問題が生ずることがあるようです。


以下では、この問題について、少し詳しく述べます。
ただ、残念ながら、この問題を一挙に解決する解決法はないようです。
以下の、やや、ややこしい記述は、 お客さまの機械での最良の解決法を捜すための参考程度の記述です。




exeファイル作成と同時に作成される st4unst.log ファイルの記述から、 Visual Basic Ver 4.0 の SetUp プログラムは、 インストール時に次の作業を行っていると推測されます。
  1. 部品の有無とバージョンの新旧から、セットアップ先の部品状況を変化させる。

    1. プログラムに必要な部品(dllファイルなど)の名前とバージョンの情報を持っていて、 セットアップ先の同じ部品の有無とバージョンを調べる。

    2. セットアップ先にその部品がない場合は、部品をセットアップ先におく。

    3. セットアップ先にその部品があれば、バージョンの新旧を調べて、

      1. セットアップ先のバージョンの方が古ければ、 セットアップ先の部品を自分の持っている新しいバージョンの部品に 置き換える。

      2. セットアップ先の部品のバージョンの方が新しいか同じならば、 セットアップ先に対して、特に何もしない。

  2. 必要な部品を実行時に呼び出せるようにしておく


これは、多くのプログラムで共通に使われる部品を一元化して、
といった複合的な目的のためにこのような仕組みがとられている と考えられます。

この仕組みがうまく完璧に動くためには、 すべての部品のバージョン・アップのときに「完璧に上位互換性が保たれている」ことが必要になります。 古い部品向けに書かれた命令が、 新しい部品でも、機能的には完全に古い部品でのときと同じ働きをする必要があります。
(大抵の場合、処理スピードは変化しても良い)

殆どの部品では、上位互換性は保たれているようですが、 一部の部品では、これが崩れているようです。 そのために、状況によっては、インストールの時に 「最近実行したプログラムによって、次のシステムファイルが古いバージョンに置き換えられました。・・・  」 といったようなメッセッージが表示される場合があるようです。

最新バージョンを置くという上の原則に反して、自らのプログラムに都合の良い、 特定のバージョンの部品に置き換えてしまう「お行儀の悪い」インストーラーが働いた後に、 このようなことが起こるのだろうと思われます。

この場合は、端的に言って、競合するプログラムの内、 お客様が優先順を高くしたいプログラムが要求するバージョンの部品を置いておき、 仮に、他のプログラムがこのためにうまく動かなくなっても諦めるしかないようです。

Windows95, Windows98, WindowsMe については、このような問題が生じる可能性があります。
ただ、Windows 2000 については、 各プログラムごとに、 異なったバージョンの部品を用意する仕組みができているようなので、 (「Windows はなぜ動くのか」p.145 参照) この問題は生じないでしょう(多分)。
WindowsXPも 2000系のOSなので、多分この問題は生じないでしょう。

この問題が生じたときは、お近くのWindowsに詳しい方に、下の表をお見せになって、 お客さまの機械での最善の対処策を相談してみてください。


販売プログラムで使用しているプログラム部品( dll および ocx および olb)とそのバージョン
DLLなどの
名称

V
実行
プログラム名
色名RGB辞書
.exe
曲線1.exe 曲線2.exe 備考
開発システム上
の位置
登録
プログラム名
osgs_
color_name
_rgb
osgs_
kypkusen1
osgs_
kyokusen2
Stkit432.dll 4.00.2422 4.00.2422 4.00.2422 c:\Windows\system
Vb40032.dll 4.00.2924 4.00.2924 4.00.2924 c:\Windows\system
Ven2232.olb 2.0.5924 2.0.5924 2.0.5924 c:\Windows\system
Olepro32.dll 4.0.5321 4.0.5321 4.0.5321 c:\Program Files
\Microsoft Visual Basic
\setupkit\kitfil32
\sys32
Msvcrt20.dll 2.11.0000 2.11.0000 2.11.0000 c:\Windows\system
Msvcrt40.dll 4.00.5270 4.00.5270 4.005270 c:\Program Files
\Microsoft Visual Basic
\setupkit\kitfil32
\sys32
Ctl3d32.dll 2.30.000 2.30.000 2.30.000 c:\Program Files
\Microsoft Visual Basic
\setupkit\kitfil32
\sys32
Vb4jp32.dll 4.00.2924 4.00.2924 4.00.2924c:\Windows\system
Comdlg32.ocx 6.00.8418 6.00.8418 6.00.8418 c:\Windows\system
Mfc40.dll 4.0.5321 4.0.5321 4.0.5321 c:\Program Files
\Microsoft Visual Basic
\setupkit\kitfil32
\sys32
Mfc40loc.dll 4.0.5321 4.0.5321 4.0.5321 c:\Program Files
\Microsoft Visual Basic
\setupkit\kitfil32
\sys32



なお、参考までに、2003年10月28日にYahoo! の検索機能を使って、 「部品名」と「部品名に対応するファイル拡張子」 (具体的には、 msvcrt20とdll や、 ven2232とolbや、comdlg32とocx など) と、「バージョン」、「インストール」、「不具合」という言葉をキーワードとして、 「and 検索」して、引っかかった件数を表にしてみると次のようです。
この表の件数の多い部品にはバージョン問題がある可能性が高いといえるでしょう。



プログラム部品名と上記キーワードでの件数
(件数の多い部品には、
バージョン問題のある可能性が高い。)
プログラム
部品名
検索にかかった件数(件)
Stkit432.dll
Vb40032.dll 20
Ven2232.olb
Olepro32.dll 57
Msvcrt20.dll 11
Msvcrt40.dll 44
Ctl3d32.dll 23
Vb4jp32.dll
Comdlg32.ocx 76
Mfc40.dll 32
Mfc40loc.dll


DLLの目的、機能、機能の実現方法や問題点などについては、前掲の
天野 司 著 「Windowsはなぜ動くのか」 日経BP社 2002年発行 の134ページ〜146ページあたりにかなり詳しい記述があります。




ここは DLL のバージョン問題 のページです



DLL のバージョン問題 のページ 先頭へ



使用できるOS環境について のページへ



大網白里ジオソフトTOPページ へ