我正在将CenterSnap.cls从其vb版本迁移到vb.NET,在将vb6项目导入VS 2008后,我对以下2个错误感到困惑。
Imports System.Runtime.InteropServices
Imports ESRI.ArcGIS.esriSystem
<System.Runtime.InteropServices.ProgId("StackMap.CenterSnap")>
Public Class CenterSnap
Implements ESRI.ArcGIS.Editor.ISnapAgent
Implements ESRI.ArcGIS.esriSystem.IPersistVariant ' <<<<ERROR 1
错误1类'CenterSnap'必须为接口'ESRI.ArcGIS.esriSystem.IPersistVariant'实现'ReadOnly Property ID As UID'。实现属性必须具有匹配的“ReadOnly”或“WriteOnly”说明符。 C:\ Projects \ VB_ActiveX_dll \ StackMap \ StackMap \ CenterSnap.vb 9 16 StackMap
Private ReadOnly Property IPersistVariant_ID() As ESRI.ArcGIS.esriSystem.IUID _
Implements ESRI.ArcGIS.esriSystem.IPersistVariant.ID '<<<< ERROR 2
错误2'IPersistVariant_ID'无法实现'ID',因为接口'ESRI.ArcGIS.esriSystem.IPersistVariant'上没有匹配属性。 C:\ Projects \ VB_ActiveX_dll \ StackMap \ StackMap \ CenterSnap.vb 16 94 StackMap
Get
Dim pID As New ESRI.ArcGIS.esriSystem.UID
pID.Value = "CenterSnap.clsCenterSnap"
IPersistVariant_ID = pID
End Get
为什么Implements ESRI.ArcGIS.esriSystem.IPersistVariant
没有实施?我在项目中引用了ESRI.esriSystem。
答案 0 :(得分:1)
从代码的外观来看,错误表明它期望有一个UID属性,但是你的IPersistVeriant_ID属性正在返回一个IUID。
我不熟悉ESRI.ArcGIS的内容,但看起来UID和IUID不是一回事。