0

我有两个 vb.net 类:

Public MustInherit Class Class1
    Private m_sProperty1 As String = ""
    Public Property sProperty1() As String
        Get
            Return m_sProperty1
        End Get
        Set(ByVal value As String)
            m_sProperty1 = value
        End Set
    End Property
End Class

<ComClass("classid","interfaceid","eventid")> _
Public Class Class2
    Inherits Class1

    Private m_sProperty2 As String = ""
    Public Property sProperty2() As String
        Get
            Return m_sProperty2
        End Get
        Set(ByVal value As String)
            m_sProperty2 = value
        End Set
    End Property
End Class

当我通过VB6引用编译好的DLL时,Class2只暴露了sProperty2。如何通过 COM 访问基类 (sProperty1) 的继承属性?

4

2 回答 2

1

这似乎回答了你的问题:

导出继承层次结构

托管类层次结构在作为 COM 对象公开时会变平。例如,如果您定义一个带有成员的基类,然后在作为 COM 对象公开的派生类中继承该基类,则在 COM 对象中使用派生类的客户端将无法使用继承的成员. 基类成员只能作为基类的实例从 COM 对象访问,并且仅当基类也被创建为 COM 对象时。

取自此处: 互操作性故障排除

于 2009-02-13T16:26:05.060 回答
0

我会猜测一下,因为我在 .NET 上的速度不够快

我想您的声明正在使用您的 Class2 的公共方法并从中创建一个 COM 接口。它只会采用 Class2 上的方法(和属性)而不是继承的方法(否则您将获得所有公共方法一直到您的基类)。

解决方案可能是将 Class1 也声明为 COM 类(可以将其标记为私有),然后指定 Class2 的 COM interfaceid 来自 Class1 的 COM interfaceid。

像这样的东西应该可以解决问题。

于 2009-02-13T16:05:33.923 回答