1

(注意:名称和 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\{guid})找到DLL文件的位置。但是,我在那里找不到我正在寻找的 GUID。

IAgent鉴于我知道IAgent的 GUID ,我如何找到包含定义的 DLL ?

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

4

1 回答 1

1

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

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

但是,有更好的方法来查找此信息。HKEY_CLASSES_ROOT\CLSID\ 有对象的子键,但 IAgent 是一个接口。如果您知道接口的 GUID,您可以查看 HKEY_CLASSES_ROOT\Interface\{guid}。在那里,如果你找到一个 key TypeLib,默认值是一个 GUID,你可以在 HKEY_CLASSES_ROOT\TypeLib 中找到,从那里你可以找到 dll 的路径。如果不存在,则名为ProxyStubClsidor的键中的默认值ProxyStubClsid32是可以在 HKEY_CLASSES_ROOT\CLSID 中找到的 GUID。

于 2013-06-13T17:15:39.573 回答