4 Stimmen

Wie deklariert man COM-sichtbare standardmäßig indizierte Eigenschaften in VB.NET?

Wie deklariert man eine standardmäßig indizierte Eigenschaft in VB.NET, so dass sie von VBScript aus aufrufbar ist?

Ich habe dies versucht mit

<DispId(0)> _
Public ReadOnly Property Item(ByVal idx As Integer) As ...

aber VBScript gibt die Fehlermeldung

Falsche Anzahl von Argumenten oder ungültige Eigenschaftszuweisung Fehlercode 800A01C2

Dieser Fehler tritt nicht auf, wenn ich eine normale Eigenschaft (nicht indiziert) von VB.NET freilege.

Hier ist ein Beispiel:

Klasse1.vb:

  Public Class Class1
    Public ReadOnly Property Dogs() As Dogs
        Get
            Return New Dogs()
        End Get
    End Property
  End Class

Dogs.vb:

  Imports System.Runtime.InteropServices

  Public Class Dogs
    <DispId(0)> _
    Public ReadOnly Property Item(ByVal idx As Integer) As Dog
        Get
            Return New Dog
        End Get
    End Property
  End Class

Dog.vb:

  Public Class Dog
    Public ReadOnly Property Name() As String
        Get
            Return "Fido"
        End Get
    End Property
  End Class

VBScript:

  Set obj = CreateObject("FmuComTest.Class1")

  MsgBox obj.Dogs.Item(0).Name   ' this works

  MsgBox obj.Dogs(0).Name        ' error message

Der Zugriff auf die standardmäßig indizierte Eigenschaft Dogs.Item(idx) führt zu einer Fehlermeldung.

2voto

Frozenskys Punkte 4024

Dieser MSDN-Blogbeitrag bringt vielleicht etwas Licht ins Dunkel. Es scheint, dass VBScript und COM wählerisch sind, wenn es darum geht, wie Standardwerte aufgerufen werden.

http://blogs.msdn.com/ericlippert/archive/2005/08/30/458051.aspx

0voto

Gary McGill Punkte 25122

In herkömmlichem VB war die für die Standardeigenschaft verwendete ID -1, glaube ich. Ich habe keine Ahnung, ob dies in Bezug auf eine DispId Sinn macht.

0voto

Steven Doggart Punkte 42527

Sie müssen die Eigenschaft als eine Default Eigentum. Sie müssen auch die Eigenschaft DispId Attribut. Zum Beispiel:

Public Class Dogs
    Default Public ReadOnly Property Item(index As Integer) As Dog
        Get
            Return New Dog()
        End Get
    End Property
End Class

Der Compiler weist der Standardeigenschaft automatisch DISPID 0 zu, so dass eine explizite Angabe im Attribut nicht erforderlich ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X