如何深入研究 COM 对象?

How do I dig into a COM object?

我正在挖掘 .NET 源代码,我发现了一个 COM 对象的互操作 class。如果我有 guid,我该如何找到有问题的 DLL 和 class(就此而言,.NET 如何根据 guid 加载 DLL)?

它在 GAC 的某个地方吗?

COM dll 未放入 GAC(仅适用于 .NET 程序集 - 因此得名 Global Assembly Cache)。

如果您知道 COM 组件的 GUID 并想知道实际二进制文件的路径,您可以在注册表中使用它来计算。

开始 regedit.exe,导航到

HKEY_CLASSES_ROOT\CLSID\<guid value>\InprocServer32

并检查键的默认值。或者,对于命令行爱好者,请使用 reg.exe 工具:

reg query HKEY_CLASSES_ROOT\CLSID\{0000002F-0000-0000-C000-000000000046}
HKEY_CLASSES_ROOT\CLSID\{0000002F-0000-0000-C000-000000000046}\InprocServer32
   (Default)    REG_SZ    C:\Windows\System32\oleaut32.dll
   ThreadingModel    REG_SZ    Both