VB.NETでVBScriptから呼び出し可能なように、既定のインデックス付きプロパティをどのように宣言しますか?VB.NETでCOMで表示される既定のインデックス付きプロパティを宣言する方法?
私は
<DispId(0)> _
Public ReadOnly Property Item(ByVal idx As Integer) As ...
を使用して、これを試してみましたが、VBScriptのは、私は公開する場合は、引数または無効なプロパティの割り当て エラーコード800A01C2
のエラーメッセージ
間違った番号このエラーは発生しません返しますVB.NETからの通常のプロパティ(インデックスなし)。ここで
はサンプルです:
'のClass1.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 :
デフォルトのインデックス付きプロパティDogs.Item(idx)にアクセスすると、エラーメッセージが表示されます。
明らかに、CLRは、上記のMSDNブログで説明したように、ネイティブCOMと同じ方法でIDispatch :: Invoke()を実装していません。 Microsoftサポートでは、コレクションを返すすべてのプロパティにオプションのインデクサーを追加することを推奨しています。これは私の問題を解決しました。 –