二进制兼容性


来源  

二进制兼容性

关于二进制兼容性

大多数 ArcGIS 开发人员都熟悉二进制兼容性。

如果客户端【针对某组件的某一个版本】进行了编译,并且能在新版本的组件上运行,而无需重新编译客户端。我们就称,这个新版本的组件【与它先前的版本】具有二进制兼容性。

我们会对每个组件都与 GUID (全局唯一标识符) 相关联,例如类 ID、接口 ID 和类型库 ID。 在组件的各版本之间,保持相同的 GUID ,表示这些版本的组件是二进制兼容的。

在 .NET 中,为了保持二进制兼容性,您可以使用 GuidAttribute 类为您的类手动指定类 ID。 通过指定 GUID,您可以控制该 GUID 何时更改。 如果不指定 GUID,在您第一次将组件导出到 COM 时,【类型库导出器】会为它自动生成一个GUID。 尽管导出器通常在后续导出中继续使用相同的 GUID,但不能保证一直是相同的 GUID。 因此,在向 COM 公开的任何类时,请指定 GUID,包括【为 COM 互操作而注册的项目内的】任何类。

在 Visual C++ 中,开发人员在项目的 IDL 文件中指定 GUID ,来控制组件的 GUID,从而帮助控制二进制兼容性(IDL,Interface Definition Language,接口定义语言)。

下面的代码示例,显示了应用于类的 GUID 特性。 您可以使用 VS.NET 中的 名为【ESRI GuidGen】的 Add-In项,将此 GUID 值的特性,应用到已存在的类中去。

[C#]

[GuidAttribute("9ED54F84-A89D-4fcd-A854-44251E925F09")]
public class SampleClass
{
   //
}

[VB.NET]

<GuidAttribute("9ED54F84-A89D-4fcd-A854-44251E925F09")> _
              Public Class SampleClass
   '
End Class

或者,如果您使用的是 VB .NET,则可以改用 ComClass 属性。 此属性可用于指定类、默认接口和默认事件接口的 GUID。在解决方案资源管理器中,您可以通过右键单击项目,并选择添加新项;然后,在添加新项对话框中选择 ComClass ,来将新的 ComClass 添加到您的项目中。 这不仅会应用属性,还会生成和添加新的 GUID 以在属性中使用。 或者,您可以将该属性应用于已存在的类,如以下代码示例所示。

有关生成新 GUID 的不同方式的更多信息,参阅 Using ArcObjects (COM-based) in .NET

[VB.NET]

<ComClass("B676A49F-2672-42ea-A378-20C17D1F2AFF", _
         "5A90404F-8D1A-4b77-8F3F-C347A97FA34C", _
         "58C9B6E4-B4F3-48dc-862A-181E566C4A31")> _
         Public Class SampleClass
   '
End Class