†逆襲のOS/2†

旧バージョンのDLLの併用

作成開始日 2021.11.16
最終更新日 2021.11.16

新しいアプリケーションをインストールする場合、関連DLLのアップデートが必要になる事が多い。ところが、DLLをアップデートすると古いアプリケーションが動かなくなる事がある。極端な場合、全く異なるDLLのファイル名がたまたまカブってしまい、どちらかのアプリを捨てなければならなくなる事もある。このような場合、アプリケーションによってDLLの検索パスを使い分けることができると便利だ。

DLLの検索パスはCONFIG.SYS内の「LIBPATH=…」で設定されているので、ここを書き換えれば良い。たとえば、通常のDLLは「\OS2\DLL」に収納されているが、新たに「\OS2\DLL_OLD」というディレクトリを作成し、旧版のDLLをこちらに収録し、必要に応じて「LIBPATH=C:\OS2\DLL_OLD;…」のように設定を変更すれば良い。ただし、この方法では、変更の度にシステムリブートが必要なる。

あるいは、「LIBPATH=」の先頭はカレント・ディレクトリ(.)になっていることが多いので、優先的に使用したいバージョンのDLLをカレント・ディレクトリに置いておくという方法もある。だが、使用する場所が固定されている、または「作業ディレクトリー」を設定できるアプリケーションならばともかく、どのディレクトリで使用するか判らないスクリプト類では、この方法も実用性が低い。

このような場合、「SET BEGINLIBPATH=」命令を使用すると便利。これは、CONFIG.SYS内のLIBPATH設定を変更しないまま、DLLの検索パスの先頭に、新たなパスを追加する機能。上述の例ならば;

/*** MY REXX SCRIPT ***/
Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
Call SysLoadFuncs
'SET BEGINLIBPATH=C:\OS2\DLL_OLD;'
……
の要領で使用する。これにより、まず「C:\OS2\DLL_OLD」内が検索され、続いてCONFIG.SYSの「LIBPATH=」で設定されているパスが検索される。なお、「SET BEGINLIBPATH=」はコマンドライン命令であって、REXXの命令ではないので、引用符('や")で括る必要がある。

また、この設定の有効範囲はそのセッションに限定されるようだ。つまり、あるプログラムでこのコマンドを実行しても、別のプログラムには影響を与えない。これによって、プログラムごとに異なったバージョンのDLLを選択することができるようになる。


【逆襲のOS/2目次】 【ホーム】