COM 对象版本号以及如何通过 Win 注册表处理它



COM对象通过一系列信息(如GUID、ProgId等)注册到系统。TypeLib还有一个"版本"字段,a)可以写入注册表,b)位于idl中。我现在的问题是,在使用/初始化COM对象时,系统是否以某种方式检查了版本字段。例如,如果我在不更改GUID但增加版本号的情况下创建COM对象的新版本,这是否会导致任何类型的不一致?

不更改GUID而增加版本号的原因是在不接触接口的情况下修复了typelib中的错误。

这应该不是问题,gven您的部署场景。COM是一系列技术的总称。在几乎最低级别*,CoCreateInstance不关心更高级别的概念,例如typelib。它确实关心IClassFactory,特别是它的CreateInstance方法。用于获取IClassFactoryCoGetClassObject函数和IClassFactory::CreateInstance方法都不使用typelib版本号,甚至不假设存在typelib。

*在最底层,您甚至可以拥有没有类工厂或CLSID的COM对象,但这些对象不能由CoCreateInstance创建。

最新更新