[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/12/23(Fri) 15:53
投稿者名:なお
Eメール:
URL :
タイトル:
レジストリ登録されているDLLのパスを調べたい
WindowsXP, VB6環境で、あるDLLを用いたアプリをバージョンアップする際、
既存DLLがインストールされているか・バージョンはどうなっているかを調べ
たいと考えています。

DLLのバージョンを取得する方法はWebで見つけ、成功したのですが、既存DLL
のパスを取得する方法がわかりません・・↓のURLに解説されている、

hhttp://www.winapi-database.com/File/Version/VerFindFile.html

VerFindFileを使うのかな?とは思っているのですが、これを用いて以下のよ
なソース書いて実行したところ、VBがいきなり落ちてしまいます・・

Sub Test()

    Dim sCurrDir As String
    Dim sDestDir As String
    Dim lCurrSize As Long
    Dim lDestSize As Long
    
    sCurrDir = String(256, Chr(0))
    sDestDir = String(256, Chr(0))
    
    lCurrSize = 256
    lDestSize = 256
    
    Debug.Print VerFindFile(0, "mfc40.dll", "C:\Windows", _
        "C:\Window\System32", sCurrDir, lCurrSize, sDestDir, lDestSize)
    
End Sub

このAPIの正しい使い方をご教示いただけますでしょうか。
よろしくお願いいたします。

投稿時間:2005/12/23(Fri) 18:41
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: レジストリ登録されているDLLのパスを調べたい
API の宣言が間違っているようです。 下記で宣言して見てください。

Private Declare Function VerFindFile Lib "version.dll" Alias "VerFindFileA" _
    (ByVal dwFlags As Long, ByVal szFileName As String, ByVal szWinDir As String, _
    ByVal szAppDir As String, ByVal szCurrDir As String, ByRef lpuCurDirLen As Long, _
    ByVal szDestDir As String, ByRef lpuDestDirLen As Long) As Long


お気づきかと思いますが下記も    
>     Debug.Print VerFindFile(0, "mfc40.dll", "C:\Windows", _
>         "C:\Window\System32", sCurrDir, lCurrSize, sDestDir, lDestSize)

          "C:\Window\ → "C:\Windows\

投稿時間:2005/12/23(Fri) 21:30
投稿者名:なお
Eメール:
URL :
タイトル:
Re^2: レジストリ登録されているDLLのパスを調べたい
ご教示ありがとうございました。宣言を差し替えましたら落ちずにうごくようになりました。
ただ・・関数実行時にDLLの場所を指定する必要があるため、当初の目的である、レジストリ
登録されているDLLの場所を知るということはできないようでした・・

勉強になりました。ありがとうございました。

投稿時間:2005/12/23(Fri) 23:48
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: レジストリ登録されているDLLのパスを調べたい
> レジストリ登録されているDLLの場所を知るということはできないようでした・・

ActiveX DLL だとすれば、レジストリの HKEY_CLASSES_ROOT\CLSID 以下に
DLL のパスが登録されていると思います。

レジストリを検索するために必要となる、DLL の具体的な情報
(ファイル名、ProgID, CLSID 等)はわかりますか?