当我在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执行一个“热交换”,但是它似乎并不简单。注册新DLL后,我尝试在注册表中更新GUID,但得到了错误ClassFactory cannot supply requested class。
发布于 2016-01-15 12:49:51
使用regsvr32注册COM dll时,CLSID将在dll中定义。
在典型的ATL项目中,这些条目是在*.rgs文件和根据该内容更新注册表。中指定的。当然,这并不是唯一的方法,其他工具集和技术也是以不同的方式进行的。
这些CLSID实际上是在项目的.idl文件中定义的(同样,这对于阿特尔项目是有效的),.rgs文件必须正确匹配这些值。.idl文件本身包含库中所有COM类型的IDL定义,由MIDL编译器用于生成类型库。
https://stackoverflow.com/questions/34808767
复制相似问题