--------------------------------------------- Public Sub test01(ByVal num As Integer, <MarshalAs(UnmanagedType.LPArray)> ByRef strbuf() As String) Dim i As Integer
For i = 1 To num strbuf(i) = i.ToString Next
End Sub ---------------------------------------------
(LPArrayのところはSafeArrayやAsAnyでも同じでした)
また、VBScriptとCOM(VB6.0)の場合は、COM側のメソッドを、 --------------------------------------------- Public Sub test01(num As Integer, ByRef bufVar As Variant) If IsArray(bufVar) Then Dim i As Integer For i = 1 To num bufVar(i) = i Next i End If End Sub --------------------------------------------- というように 引数をVariantにすると受け渡すことができたのですが、 VB.Netでは、Variantという型はなく、Objectになってしまいます。 Objectとすると、やはりエラーになります。
分類:[.NET]
MSDNフォーラムとマルチポストです。ごめんなさい。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=928592&SiteID=7
VB.Netで、COM相互運用のDLLを作りました。
(プロジェクトのプロパティで、[COM の相互運用機能に登録]をオン)
そのDLLのクラスを、VBScriptから使いたいのですが、
配列の引数のあるメソッドを呼び出すと以下のエラーになります。
「プロシージャの呼び出し、または引数が不正です」(800A0005)
COM(VB.Net)とVBスクリプトのコードは以下のような感じです。
-------------------------------------------
■COMライブラリ(クラス:XXXXXX.YYYYYY)
Public Sub test01(ByVal num As Integer, ByRef strbuf() As String)
Dim i As Integer
For i = 1 To num
strbuf(i) = i.ToString
Next
End Sub
■VBScriptのコード
Dim aObj
Dim mCol(10)
Set aObj = CreateObject("XXXXXX.YYYYYY")
aObj.test01 10, mCol
msgbox mCol(1)
---------------------------------------------
相互運用するには、VB.Net側でマーシャリングが必要かな、と思い、
COMのコードを、以下のようにしてもみたのですが、この場合は、
「VBScriptでサポートされていないオートメーションが変数で使用されています。」
のエラーになります。
---------------------------------------------
Public Sub test01(ByVal num As Integer, <MarshalAs(UnmanagedType.LPArray)> ByRef strbuf() As String)
Dim i As Integer
For i = 1 To num
strbuf(i) = i.ToString
Next
End Sub
---------------------------------------------
(LPArrayのところはSafeArrayやAsAnyでも同じでした)
また、VBScriptとCOM(VB6.0)の場合は、COM側のメソッドを、
---------------------------------------------
Public Sub test01(num As Integer, ByRef bufVar As Variant)
If IsArray(bufVar) Then
Dim i As Integer
For i = 1 To num
bufVar(i) = i
Next i
End If
End Sub
---------------------------------------------
というように 引数をVariantにすると受け渡すことができたのですが、
VB.Netでは、Variantという型はなく、Objectになってしまいます。
Objectとすると、やはりエラーになります。
具体的なコード例などがあればとてもうれしいです。
どうぞよろしくお願いいたします。