(注意:名称和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)
答案 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的路径。如果不存在,则名为ProxyStubClsid
或ProxyStubClsid32
的密钥中的默认值是可在HKEY_CLASSES_ROOT \ CLSID中找到的GUID。