如何找到定义具有给定GUID的COM对象或接口的二进制文件?

时间:2013-06-13 17:15:40

标签: com

(注意:名称和GUID已从原始值更改)

在调试应用程序时,我发现我的应用程序链接的库中可能存在错误的罪魁祸首是

pAgent->raw_Open()

agent在我们的C ++代码中声明为

XX::IAgentPtr pAgent

所有Visual Studio都可以告诉我IAgentPtr的类型是

_com_ptr_t<_com_IIID<XX::IAgent,&_GUID_deadbeef_1234_1234_1234_1234deadbeef> >

我的调试器无法进入agent->raw_Open()的代码,看看发生了什么。我想知道哪个DLL定义XX:IAgent,因为我可以获得该DLL的调试信息或源代码。

我已经发现IAgent是一个COM接口,通过在别处搜索,我发现我可以通过查看注册表(HKEY_CLASSES_ROOT \ CLSID \ {找到DLL文件的位置) GUID})。但是,我找不到我正在寻找的GUID。

如果我知道IAgent的GUID,我怎么能找到包含IAgent定义的DLL?

(注意:虽然它们有相似的标题,但这个问题不是this question的重复,因为链接问题的提问者知道用GUID定义接口的DLL)

1 个答案:

答案 0 :(得分:0)

可以搜索二进制文件以查找纯文本数据的程序将起作用。

我使用了Windows Grep并搜索了所有DLL文件中的“deadbeef-1234-1234-1234-1234deadbeef”,并找到了定义IAgent的DLL。

但是,有更好的方法可以找到这些信息。 HKEY_CLASSES_ROOT \ CLSID \具有对象的子项,但IAgent是接口。如果您知道接口的GUID,则可以查看HKEY_CLASSES_ROOT \ Interface \ {guid}。在那里,如果找到键TypeLib,则默认值是您可以在HKEY_CLASSES_ROOT \ TypeLib中找到的GUID,从那里您可以找到dll的路径。如果不存在,则名为ProxyStubClsidProxyStubClsid32的密钥中的默认值是可在HKEY_CLASSES_ROOT \ CLSID中找到的GUID。