2

COM メソッドを呼び出す VB6 プログラムがあり、2 つの配列をパラメーターとして渡し、応答として 2 つの配列が読み込まれることを期待しています。

コードは次のとおりです。ここで、ItemIDs と ItemClientHandles は入力配列パラメーターであり、MyItemServerHandles と Errors は COM オブジェクトによって取り込まれます。

Dim ItemIDs(2) As String
Dim ItemClientHandles(2) As Long
Dim Errors() As Long             ' Array for returned Item related errors
Dim MyItemServerHandles() As Long   ' Server Handles for Items

ItemIDs(1) = "2,VW1000,word"
ItemIDs(2) = "2,VW1002,word"

ItemClientHandles(1) = 1
ItemClientHandles(2) = 2

Call MyItems.AddItems(2, ItemIDs, ItemClientHandles, MyItemServerHandles, Errors)

ここで、VB.NET から同じメソッドを呼び出して、配列を定義するために次のようなことを試してみました。

<MarshalAs(UnmanagedType.LPArray, ArraySubType:=UnmanagedType.I4, SizeConst:=2)> Private MyItemServerHandles(2) As Int32 ' Server Handles for Items
<MarshalAs(UnmanagedType.LPArray, ArraySubType:=UnmanagedType.LPWStr, SizeConst:=2)> Private ItemIDs(2) As String
<MarshalAs(UnmanagedType.LPArray, ArraySubType:=UnmanagedType.I4, SizeConst:=2)> Private ItemClientHandles(2) As Int32
<MarshalAs(UnmanagedType.LPArray, ArraySubType:=UnmanagedType.I4, SizeConst:=2)> Dim Errors(2) As Int32 ' Array for returned Item related errors

エラーが発生するため(イタリア語から翻訳しようとしています)、動作しません。

オブジェクトを型 'System.Int32[*]' から型 'System.Int32[]' にキャストできません

配列を VB.NET マネージ コードからアンマネージ COM コードにマーシャリングする正しい方法は何ですか?

ありがとう

4

1 に答える 1

2

解決しました。

出力配列は、次のように単純に宣言する必要があります。

Private MyItemServerHandles As System.Array
Private Errors As System.Array

呼び出しから戻るときに、Int32 配列として正しくマーシャリングされます。

于 2009-05-25T08:59:41.910 に答える