2016-11-09 60 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