1

我需要设置 VB6 应用程序使用的 dotNet 控件的默认属性。

<ComClass(myControl.ClassId, myControl.InterfaceId, myControl.EventsId)> _
<DefaultProperty("NewProperty")> _
Public Class myControl

    Public Const ClassId As String = "86252de2-ca87-4468-adbe-ad7c47747759"
    Public Const InterfaceId As String = "c1cbf1a1-24bb-46c3-88a4-813eb4917845"
    Public Const EventsId As String = "954ed890-011c-4908-ab33-610159fe6eb1"

    Private newPropertyValue As String
    Public Property NewProperty() As String
        Get
            Return newPropertyValue
        End Get
        Set(ByVal value As String)
            newPropertyValue = value
        End Set
    End Property
End Class

DefualtProperty 属性不能解决问题。

我在这里读到手动将 DispId 设置为零应该可以解决问题。但如果我这样做:

<DispId(0)> Public Property NewProperty() As String

Visual Basic 好心地通知我 DispId 零是为 DefaultProperty 保留的。是的。我知道。我要那个。但是怎么做?

编辑:

Default Public Property NewProperty(ByVal foo As Integer) As String

确实可以工作,因为该属性现在显示为 VB6 中的默认属性。但这不会解决我的问题,因为有些代码我无法更改,它会执行以下操作:

aStringVariable = myUserControlInstance

这篇 MSDN 文章有一些关于此的信息。

4

2 回答 2

2

因为有我无法更改的代码

如果是这种情况,那么您需要围绕原始 .NET 类创建一个包装类,并将其导出为 VB6 使用的控件。然后您可以将默认属性标记为使用默认关键字。

于 2009-03-11T15:37:14.357 回答
1

除了在 VB6 中创建一个包装器来模仿 VB6 的默认属性行为之外,别无他法。我不得不创建几个互操作用户控件,这是我们必须在 VB6 中再次包装一个 .Net 互操作控件的主要原因(以避免大量代码更改和大量测试工作)。

于 2009-06-29T19:57:58.470 回答