1

ユーザー定義のクラス型 ByRef の配列を Excel vba から vb.net に渡すにはどうすればよいですか? ここでdouble 配列を渡すことを扱った同様の投稿があり、UDT で同じ方法を使用しようとしましたが、機能しません。何か案は?

4

1 に答える 1

1

この質問でリンクした他の質問と非常によく似た自分の質問に(再び)答えて申し訳ありませんが、他の質問への回答とほぼ同じ方法でそれを達成できました。屈折パラメータの一部を変更する必要がありました。

vb.net コードでは、パラメーターをオブジェクトとして取り込み、そのオブジェクトの型 (object() 配列として認識される) を取得し、vb.net の次の関数を使用して、そのオブジェクト配列を目的のクラス配列に直接キャストします。

Friend Function ComObjectArrayToPointArray(ByVal comObject As Object) As Point()
    Dim thisType As Type = comObject.GetType
    Dim fibType As Type = Type.GetType("System.Object[]")
    Dim fibArray(0) As Point
    If thisType Is fibType Then
        Dim args(0) As Object
        Dim numEntries As Integer = CInt(thisType.InvokeMember("Length", BindingFlags.GetProperty, _
                                        Nothing, comObject, Nothing))
        ReDim fibArray(numEntries - 1)
        For j As Integer = 0 To numEntries - 1
            args(0) = j
            fibArray(j) = DirectCast((thisType.InvokeMember("GetValue", BindingFlags.InvokeMethod, _
                                    Nothing, comObject, args)), Point)
        Next
    End If

    Return fibArray

End Function
于 2013-08-07T19:18:41.513 に答える