2016-11-09 57 views
-1

我需要HMODULE來調用GetModuleInformation,但我只知道類的居住在DLL中的COM GUID。是否有winapi函數來確定只知道GUID的HMODULE(或dll名稱)?如何從COM GUID獲取HMODULE

編輯:應用程序運行的普通用戶(不升高)

+0

[GetModuleHandleEx](https://msdn.microsoft.com/en-us/library/windows/desktop/ms683200.aspx),傳遞一個接口方法的地址。 – IInspectable

+0

@IInspectable:只適用於進程內COM對象,即使只有在實際擁有COM對象的實例時也是如此。 OP說他只有一個GUID,而不是一個對象。 –

+0

@RemyLebeau:*「僅適用於進程內COM對象」* - 由於'HMODULE'只在進程中有意義,因此我認爲這不會限制適用範圍。而且你不需要一個對象的實例來獲取成員函數的地址。類型信息已足夠,GUID唯一標識一個類型。 – IInspectable

回答

2

如果GUID是一個COM對象CLSID,您可以查找在Windows註冊表中的對象的執行EXE/DLL文件名(在HKEY_CLASSES_ROOT\CLSID\{guid}子項) ,或者如果您的應用程序正在使用免註冊COM,請改爲在應用程序的SxS清單中。

如果對象位於DLL中,則可以使用GetModuleHandle/Ex()(如果該DLL已經加載到進程的內存中),或者使用LoadLibrary()將其加載到內存中。

+0

這對於[免註冊COM](https)無效://msdn.microsoft.com/en-us/library/ms973913.aspx)。 – IInspectable

+0

免註冊的COM使用清單,因此您只需在清單中查找GUID而不是註冊表。清單將具有COM對象的EXE/DLL文件的路徑。 –

+0

我完全理解,如何實現無註冊的COM。我指出,你的答案不適用於這種常見的情況。 – IInspectable