マネージDLLがアンマネージDLLを呼び出す状況があります。アンマネージDLLのCLSIDを知っています。そのCLSIDを格納しているバイナリファイルを見つける方法はありますか?
通常、次の場所に移動できます。
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\"GUID"
そして、例えば「InProcServer32」と呼ばれるキーを見つけると、DLLを持つデフォルト値が存在します。これは、そのための1つの簡単な方法です。
Regeditを使用してレジストリでそれを検索し、バイナリパスを探すことはできませんか?.
BobbyShaftoeの返信に基づいて、そのレジストリーを読み取る単純なvbsスクリプトを作成できます。
Dll_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\InProcServer32\"
以下を「test.vbs」に貼り付けます
Sub Main
' used to find location of "System.Collections.ArrayList" progid dll
Const csGUID = "{6896B49D-7AFB-34DC-934E-5ADD38EEEE39}"
MsgBox srGetDllPathByGUID(csGUID)
End Sub
Function srGetDllPathByGUID( sGUID )
Const csRegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\InProcServer32\"
Dim oShell: Set oShell = CreateObject("WScript.Shell")
Dim sReg: sReg = Replace( csRegPath, "<GUID>", sGUID ) ' build str
srGetDllPathByGUID = oShell.RegRead(sReg)
Set oShell = Nothing ' clean up
End Function
Call Main
次の方法でもProgIdを見つけることができます。
ProgID_RegPath = "HKEY_CLASSES_ROOT\CLSID\<GUID>\ProgID\"