2008-11-13 64 views
3

我知道,当您在COM接口中添加/更改/删除方法时,应该更改接口/ coclass GUID,但是类型库又如何。什么时候应该更改类型库的GUID?如果类型库中的GUID发生更改,是否更改它?或者,只有当类型库中没有自己的GUID的内容发生更改时,才需要对其进行更改。何时更改类型库上的GUID

回答

3

基本原理是COM接口和类型库应该是不可变的(也就是说,它们不应该改变)。如果您在COM界面中更改了一个项目,那么新版本需要成为与以前版本完全分离的实体。唯一的方法是更改​​库中每个接口的GUID和类型库自身的GUID。这也是一个好主意(为了您自己的理智)更改类型库的名称。

理想情况下,你不应该改变一个COM接口。相反,创建一个新的派生COM接口并发布到一个新的类型库中。

+0

不是全部故事! **您可以添加新的接口和类型**而不更新任何现有的GUID,包括类型库GUID。你可以**添加新的接口到现有的类**。这意味着您可以在不破坏现有编译代码的情况下添加新功能。请参阅http://msdn.microsoft.com/en-us/library/7ydsx43e.aspx。所以,类型库*可以改变! – Olly 2012-10-12 18:26:41

0

我有类似的问题。

我有一个原来的控制与CLSID_A后来上实现接口IID_A在某些1.0类型库GUID_A

,我决定到一个新的接口添加到原来的控制。然后它将实现IID_A和IID_B接口。我想我应该保持相同的CLSID,但不知道如何处理typelib本身。我主要是做VC++编程的东西,其中涉及QueryInterface,并且不关心版本控制和typelib。你想创建一个具有特定CLSID的对象,你只需要询问CoCreated实例...然后查询接口以获得对新接口的潜在支持...

现在,当我进入像LabVIEW这样的更加美好的环境或设计时像Microsoft .NET这样的嵌入式开发环境,似乎打破了MFC的东西。

你在回答中提到要更改所有的GUID。是否将基于可用功能的应用程序调整为一个完整范例,新的应用程序仍然可以使用它的基本功能与控制的旧版本?也许我没有注意到后面的一段话:没有必要让一个应用程序适应旧的控制版本运行,它只需要一个特定的控制版本。这也是M $出现在ASSEMBLY中的原因。