我修复了VB6组件之一中的一个问题,作为该问题的一部分,我必须编译一个我没有更改任何代码的依赖项控件。这里的问题是,当我编译依赖项ActiveX dll时,依赖项ActiveX dll GUID已更改为新的GUID。我更改代码的组件没有更改GUID。为什么我看到这种行为?
答案 0 :(得分:1)
摘自《 Visual Basic 6概念指南》中的“ Version Compatibility for Interfaces”:
在开发新组件期间,只要在“项目属性”对话框的“组件”选项卡上选择了“项目兼容性”或“不兼容”,Visual Basic每次编译时都会生成新的IID。如果选择了“不兼容”,也会生成新的CLSID。如果选择了项目兼容性,则将维护CLSID。但是,一旦发布了组件并开始使用该组件的增强版本,则可以使用Visual Basic的二进制版本兼容性功能来更改此行为。
如“调试,测试和部署组件”中“ Version Compatibility”中详细描述的那样,二进制版本兼容性保留了组件先前版本中的类ID和接口ID。这样一来,使用先前版本编译的应用程序便可以与新版本一起使用。
默认情况下,VB6每次都会创建一个新的GUID,除非您告诉它一个用于二进制兼容性的文件,然后,如果可能,它将使用该文件中的GUID。它可能是一个奇怪的默认值,但这是它的工作方式,并且文档中的“ Version Compatibility”部分描述了所有详细信息。