2009-05-25 60 views
1

我有一个VB6程序,它调用一个COM方法,传递两个数组作为参数,期待2个数组被填充为响应。将数组从VB.NET封装到COM对象中

代码是这样的,其中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代码的正确方法是什么?

谢谢

回答

1

已解决。

输出数组必须简单地声明为

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

,他们将作为正确阵列的Int32从调用返回时被封。