Mar*_*lan 5 vb6 com guid binary-compatibility
在白天的工作中,我使用VB6(我知道,但不要模拟受影响的......)应用程序,它使用了我们编写的许多库(也是在着名的VB6中).其中一个支持库有大量私有成员通过公共属性公开,我被要求删除属性,并将私有成员变量提升到与原始属性同名的公共字段.
现在,我不是COM专家,但我的印象是,类中的每个暴露项都获得了它自己的GUID.因为我们将从每个值从2个Guids(Property Get和Property Let)变为仅使用一个(公共字段)的情况开始,我期望这会破坏二进制兼容性 - 但它似乎没有做到了.
有谁能解释为什么?
不,它没有破坏兼容性,因为它没有删除属性get和property let方法.只是编译器正在为您编写它们.
这不是VB6可以说比.Net 更好的少数领域之一吗?
我认为这比这更微妙。您将获得 COM 接口的 GUID(不是每个单独的字段/方法)。据我了解,二进制兼容性尝试确定当前编译的接口是否向后兼容 DLL 的参考版本(假设您有一个),并且仅在不兼容时才更改 GUID。
因此,我也很惊讶它决定删除所有兼容的 get/set 方法:/