注册COM时Clsid从何而来
Where Clsid comes from when registering COM
当我在 CMD 中通过 运行 regsvr32 MyCOMdll.dll
注册 COM dll 时,我看到在注册表中创建了几个条目,其中之一是:
[HKEY_CLASSES_ROOT\MyCOMdll.MyClass\Clsid]
@="{DB402D5A-5584-4F68-A750-45D3E8133121}"
我想了解 DB402D5A-5584-4F68-A750-45D3E8133121
的来源,最初我认为 GUID 是在您注册此 DLL 时生成的,但是我在不同的环境中检查了它,发现它具有相同的值。看起来这些 GUID 已嵌入到 DLL 中,但我无法确认或找出具体位置。
上下文: 我想执行该 COM 的 "hot swap",但它似乎并不简单。我尝试在注册新 DLL 后更新注册表中的 GUID,但出现错误 ClassFactory cannot supply requested class
。
当您使用 regsvr32
注册 COM dll 时,CLSID 是在 dll 中定义的。
在典型的 ATL COM 项目中,这些条目在 *.rgs 文件和 registry is updated based on that content 中指定。当然,这不是唯一的方法,其他工具集和技术也有不同的方法。
这些CLSID实际上是在项目的.idl文件中定义的(同样,这对库中所有COM类型的ATL projects), and .rgs file must correctly match the values. The .idl file itself contains IDL定义有效,并且被MIDL编译器用来生成类型库.
当我在 CMD 中通过 运行 regsvr32 MyCOMdll.dll
注册 COM dll 时,我看到在注册表中创建了几个条目,其中之一是:
[HKEY_CLASSES_ROOT\MyCOMdll.MyClass\Clsid]
@="{DB402D5A-5584-4F68-A750-45D3E8133121}"
我想了解 DB402D5A-5584-4F68-A750-45D3E8133121
的来源,最初我认为 GUID 是在您注册此 DLL 时生成的,但是我在不同的环境中检查了它,发现它具有相同的值。看起来这些 GUID 已嵌入到 DLL 中,但我无法确认或找出具体位置。
上下文: 我想执行该 COM 的 "hot swap",但它似乎并不简单。我尝试在注册新 DLL 后更新注册表中的 GUID,但出现错误 ClassFactory cannot supply requested class
。
当您使用 regsvr32
注册 COM dll 时,CLSID 是在 dll 中定义的。
在典型的 ATL COM 项目中,这些条目在 *.rgs 文件和 registry is updated based on that content 中指定。当然,这不是唯一的方法,其他工具集和技术也有不同的方法。
这些CLSID实际上是在项目的.idl文件中定义的(同样,这对库中所有COM类型的ATL projects), and .rgs file must correctly match the values. The .idl file itself contains IDL定义有效,并且被MIDL编译器用来生成类型库.