Маршалинг массивов из VB.NET в COM-объект

У меня есть программа VB6, которая вызывает метод COM, передавая 2 массива в качестве параметров и ожидая заполнения 2 массивов в ответ.

Код таков, где ItemID и 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?

Спасибо


person Enrico Detoma    schedule 25.05.2009    source источник


Ответы (1)


Решено.

Выходные массивы должны быть просто объявлены как

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

и они будут правильно маршалированы как массивы Int32 при возврате из вызова.

person Enrico Detoma    schedule 25.05.2009