Как передать массив VB6 на С# через COM Interop?
Я хотел бы вызвать метод в VB6, который имеет массив в качестве параметра. К сожалению, VB жалуется на неподходящий тип. Мой код С#:
public void CreateMultipleNewEsnBelegung(ref QpEnrPos_COM[] Input);
public void CreateMultipleNewEsnBelegung(ref QpEnrPos_COM[] Input)
{
List<Domain.Entities.QpEnrPos> qpEnrPos = new List<Domain.Entities.QpEnrPos>();
foreach (var item in Input)
{
qpEnrPos.Add(ComConverter.ConvertQpEnrPosComToQpEnrPos(item));
}
Methods.CreateMultipleNewESNPos(qpEnrPos);
}
Мой код VB:
Dim qpenrPos(1) As CrossCutting_Application_ESN.QpEnrPos_COM
Set qpenrPos(0) = secondimportModel
Set qpenrPos(1) = firstimportModel
obj.CreateMultipleNewEsnBelegung (qpenrPos())
Я знаю, что мне нужно что-то сделать с MarshalAs. Однако я не могу найти правильный способ сделать это.
Да, это объект, созданный на C#. Объект работает в VB без проблем. Я знаю это, потому что уже использую его для других методов, но в этих случаях я передаю его не как массив, а как простой объект.
@GSerg Спасибо. Я улучшил это. Тем не менее, я все еще получаю это сообщение об ошибке: недопустимый вызов процедуры или недопустимый аргумент
Как теперь выглядит улучшенный код и какова сигнатура метода, отображаемая в обозревателе объектов VB6?





Мне удалось заставить его работать. Хитрость заключалась в том, чтобы указать массив как массив объектов. Но содержимое массива можно заполнить любым типом данных.
public void CreateMultipleNewEsnBelegung(ref object[] Input);
public void CreateMultipleNewEsnBelegung(ref object[] Input)
{
List<Domain.Entities.QpEnrPos> qpEnrPos = new List<Domain.Entities.QpEnrPos>();
foreach (var item in Input)
{
qpEnrPos.Add(ComConverter.ConvertQpEnrPosComToQpEnrPos(item));
}
Methods.CreateMultipleNewESNPos(qpEnrPos);
}
Код ВБ:
Dim qpenrPos(1) As Variant
Set qpenrPos(0) = secondimportModel
Set qpenrPos(1) = firstimportModel
obj.CreateMultipleNewEsnBelegung (qpenrPos)
Это не указано в вашем вопросе, но я предполагаю, что вы создали объект на C#, который вы представили COM, и теперь хотите использовать его из VB6. Вы сделали это правильно? Какова сигнатура метода, как она появляется в обозревателе объектов VB6? У вас также есть две пары ошибочных скобок в строке
obj.CreateMultipleNewEsnBelegung (qpenrPos()), удалите их.