HKCR\TypeLib\<TypeLib>下的文件路径追加“\<num>”是什么意思

What does it mean to append "\<num>" to file paths under HKCR\TypeLib\<TypeLib>

在尝试解析 TypeLib 注册表项下的文件路径时,我看到了几个(不是全部)注册表值,如下所示:

HKEY_CLASS_ROOT\TypeLib\{EE9CFA8C-F997-4221-BE2F-85A5F603218F}.0[=13=]\win64(Defalt): C:\Program Files (x86)\Microsoft Office\root\VFS\ProgramFilesX64\Microsoft Office\Office16\OCHelper.dll

HKEY_CLASS_ROOT\TypeLib\{F9E34568-0298-46D3-B9C4-19AFB415CBA8}.0[=13=]\win32(Default): C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\mswebprj.dll

HKEY_CLASS_ROOT\TypeLib\{F2A7EE29-8BF6-4a6d-83F1-098E366C709C}.0[=13=]\win32(Default): C:\Program Files (x86)\Microsoft Office\Root\Office16\ONENOTE.EXE

每个文件路径都附加了一个反斜杠和一个数字。显然,这些文件路径对文件系统来说是不合法的。我想知道是否有人认识语法,以及附录对这些注册表项下的类型库注册意味着什么。

在 Visual Studio 中使用文件 > 打开 > 文件和 select C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\mswebprj.dll。您将看到嵌入在 DLL 中的资源。打开 TYPELIB 节点,您会立即看到 5 的含义。

是资源id。

更典型的情况是文件中只嵌入了一个类型库,并且资源 ID #1。有时类型库不是嵌入的,而是存储在一个单独的文件中,通常带有 .tlb 或 .olb 文件扩展名。像 .NET [ComVisible] 程序集,Office 就是一个常见的例子。

通常我们使用LoadRegTypeLib for load typelib based on registry information. the The function LoadRegTypeLib defers to LoadTypeLib to load the file. and read Remarks section for LoadTypeLib

By default, the type library is extracted from the first resource of type ITypeLib. To load a different type of library resource, append an integer index to szFile. For example:

ITypeLib *ptlib;
LoadTypeLib("C:\MONTANA\EXE\MFA.EXE\3", &ptlib)

This statement loads the type library resource 3 from the file Mfa.exe file.