VB6でプログラムを作成しているのですが、使用しているDLLがあるかどうかやバージョンのチェックしたいのですが
どのようにすればできるのでしょうか。
よろしくお願いします。
まず、DLLの存在チェックに関してですが、Regular DLLなら、
Declare宣言しておいた関数を呼び出してみて、その時に発生しうる
ファイルが見つかりません、というエラーをトラップしては如何でしょう。
同様にActiveX DLLの場合は、NewもしくはCreateObjectしてみて、
オブジェクトを作成できません、というエラーをトラップする、と。
もう一つの質問である、バージョンのチェックですが、これは
チェック方法がDLLによって異なるのでなんともいえません。
Comctl32.dll などであれば、DllGetVersion APIで取得することができますし、
UNLHA32.DLLなら、UnlhaGetVersion, UnlhaGetSubVersion APIですね。
もう少し汎用的な判定法としては、ファイルのバージョン情報を利用する事ができます。
こちらは、GetFileVersionInfo APIで取得できますが……DLLによっては、
ファイルバージョンが存在しないDLLもありますので、注意してください。
(バージョン情報の有無は、GetFileVersionInfoSizeで判定できます)
なお、ActiveX DLLの場合は、ファイル自体のバージョンよりも、
タイプライブラリのバージョン情報の方が重要だと思いますが、こちらは、
TLBINF32.DLLを参照設定し、そこに含まれる MajorVersion/MinorVersionプロパティで
取得することが可能です。
# 各関数の具体的な使い方は、SDK等で調べて見てください。
>DLLの存在チェックに関してですが、Regular DLLなら
補足:
ここでいう「Regular DLL」は、たぶん「ActiveX DLLでない旧来のDLL」
(VBレベルで言うとDeclare宣言して使用するDLL)のことを意味します。
本来、「ActiveX DLL でない旧来のDLL」の名称はただの「DLL」です。
また、拡張子がDLLであるファイルの総称も「DLL」であり、
ActiveX DLLの略称(あるいは俗称)も「DLL」であるため
単にDLLといっただけでは、「ActiveX DLL でない旧来のDLL」なのか、
「ActiveX DLL」なのか「ActiveX DLL + ActiveX DLL でない旧来のDLL 」
なのかわからなくなります。
そこで、ActiveX DLL でない旧来のDLLを「ActiveX DLL でないDLL」とか
「API DLL」とか称して区別しますが、定着した名称はありません。
(面倒なので、これ以降、ActiveX DLL でない旧来のDLLをAPI DLLと称します。)
ところで、「Regular DLL」ですが、これは本来、「拡張DLLでないAPI DLL」
のことをさします。「拡張DLL」とは、誤解を承知で大雑把にいうと、
「DLL版MFC を利用するユーザ作成のAPI DLL」です。
(利用のしかたによっては、レギュラーDLLでも作れたりしますが・・・)
詳しくは、MSDN Libraryでレギュラー DLL , 拡張 DLL あたりを
調べてみてください。
ありがとうございます。
お二人の説明をみてやってみます。