4

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

4

2 回答 2

4

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

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

于 2008-11-13T18:07:26.447 回答
0

我有一个类似的问题。

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

后来,我决定在原来的控件上增加一个新的界面。然后它将实现 IID_A 和 IID_B 接口。我想我可能应该保持相同的 CLSID,但不知道如何处理 typelib 本身。我主要是在做涉及 QueryInterface 的 VC++ 编程的东西,并且不太关心版本控制和类型库。您想创建一个具有特定 CLSID 的对象,您只需询问 CoCreated 实例……然后查询接口以获取对新接口的潜在支持……

现在,当我进入 LabVIEW 等更高级的环境或 Microsoft .NET 等设计时插入式开发环境时,MFC 的东西似乎就坏了。

您在回答中提到要更改所有 GUID。基于可用功能调整应用程序的整个范例是否已死,新应用程序仍然可以将其基本功能与旧版本的控件一起使用?也许我没有抓住后来的浪潮:使用旧的控件版本来调整应用程序运行没有意义,它只需要特定的控件版本。这就是 M$ 也推出 ASSEMBLY 的原因。

于 2008-12-22T23:26:20.217 回答