我有一个调用 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 代码的正确方法是什么?
谢谢