我知道,当您在COM接口中添加/更改/删除方法时,应该更改接口/ coclass GUID,但是类型库又如何。什么时候应该更改类型库的GUID?如果类型库中的GUID发生更改,是否更改它?或者,只有当类型库中没有自己的GUID的内容发生更改时,才需要对其进行更改。何时更改类型库上的GUID
3
A
回答
3
基本原理是COM接口和类型库应该是不可变的(也就是说,它们不应该改变)。如果您在COM界面中更改了一个项目,那么新版本需要成为与以前版本完全分离的实体。唯一的方法是更改库中每个接口的GUID和类型库自身的GUID。这也是一个好主意(为了您自己的理智)更改类型库的名称。
理想情况下,你不应该改变一个COM接口。相反,创建一个新的派生COM接口并发布到一个新的类型库中。
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中的原因。
相关问题
- 1. 如何更改对象GUID
- 2. 在运行时更改类的类型
- 3. fluentmigrator Guid MySQL类型
- 4. 如何在vb6中更改DCOM的guid?
- 5. 更改数据库中的日期时间类型
- 6. 更改self.view的类类型
- 7. 将“选择”类型更改为值更改时的“日期”类型
- 8. 如何更改子类上的变量数据类型
- 9. 如何在读取Ace.OleDB时更改数据类型如何在读取Ace.OleDB时更改数据类型
- 10. 什么是GUID类型?
- 11. 未知项目类型GUID
- 12. 使用EntityFramework在运行时更改数据库类型
- 13. 更改上传控件文件类型
- 14. 在Google云上更改机器类型
- 15. 更改类型帧
- 16. 如何更改德比数据库中列的数据类型?
- 17. 如何更改SVN存储库中的类型?
- 18. 在运行时更改元素类型
- 19. 在运行时更改变量类型
- 20. 运行时更改变量类型
- 21. 从模型更新数据库(模型更改时)?
- 22. NSArray更改类型的NSNumber
- 23. C#TypeConverter长枚举类型在更改类型上失败
- 24. 如何更改按键上的输入字段的类型 - angularjs
- 25. 动态类型大小更改时如何更新WKWebView?
- 26. 如何更改AsynTask的返回类型?
- 27. 如何更改MAMP中的MIME类型
- 28. 如何更改Heroku中的列类型?
- 29. 如何更改类型的属性?
- 30. 如何更改VARIANT的类型
不是全部故事! **您可以添加新的接口和类型**而不更新任何现有的GUID,包括类型库GUID。你可以**添加新的接口到现有的类**。这意味着您可以在不破坏现有编译代码的情况下添加新功能。请参阅http://msdn.microsoft.com/en-us/library/7ydsx43e.aspx。所以,类型库*可以改变! – Olly 2012-10-12 18:26:41