Com 何时更改类型库上的GUID

Com 何时更改类型库上的GUID,com,guid,typelib,Com,Guid,Typelib,我知道,当您在COM接口中添加/更改/删除方法时,您应该更改接口/coclass GUID,但类型库呢。何时更改类型库的GUID?如果类型库中的GUID已更改,是否更改它?或者,您应该只在类型库中没有自己的GUID的内容发生更改时才更改它。基本原则是COM接口和类型库应该是不可变的(也就是说,它们永远不应该更改)。如果更改COM接口中的一项,则新版本需要是与以前版本完全不同的实体。唯一的方法是更改库中每个接口的GUID以及类型库本身的GUID。更改类型库的名称也是一个好主意(为了您自己的理智)

我知道,当您在COM接口中添加/更改/删除方法时,您应该更改接口/coclass GUID,但类型库呢。何时更改类型库的GUID?如果类型库中的GUID已更改,是否更改它?或者,您应该只在类型库中没有自己的GUID的内容发生更改时才更改它。

基本原则是COM接口和类型库应该是不可变的(也就是说,它们永远不应该更改)。如果更改COM接口中的一项,则新版本需要是与以前版本完全不同的实体。唯一的方法是更改库中每个接口的GUID以及类型库本身的GUID。更改类型库的名称也是一个好主意(为了您自己的理智)


理想情况下,您不应该更改COM接口。而是创建一个新的派生COM接口并在新的类型库中发布

我有一个类似的问题

我有一个带有CLSID_A的原始控件,它在一些1.0类型库中用GUID_A实现了接口IID_A

后来,我决定向原始控件添加一个新接口。然后它将实现IID_A和IID_B接口。我想我应该保留相同的CLSID,但不知道如何处理typelib本身。我大部分时间都是按书编写VC++程序,这涉及到QueryInterface,不太关心版本控制和typelib。您想要创建一个具有特定CLSID的对象,您只需询问共同创建的实例…然后查询接口以获得新接口的潜在支持

现在,当我进入LabVIEW这样的高级环境或Microsoft.NET等开发环境中的设计时间下降时,MFC的东西似乎要崩溃了

您在回答中提到要更改所有GUID。基于可用功能调整应用程序的整个范例是否已经过时,新的应用程序仍然可以将其基本功能与旧版本的控件一起使用?也许我没有赶上后来的潮流,也就是说:没有必要调整应用程序以使用旧的控件版本运行,它只需要一个特定的控件版本。这就是为什么M$也推出了组装产品。

不是全部!您可以添加新接口和类型,而无需更新任何现有GUID,包括类型库GUID。还可以向现有类添加新接口。这意味着您可以在不破坏现有编译代码的情况下添加新功能。看见因此,类型库可以更改!