Мне нужно вернуть массив инициализированных объектов из VB6 в C# с помощью interop. Моя функция VB выглядитВозвращает массив объектов от VB6 до C# с помощью Interop
Public Function CreateMyObjArray(ByVal MaxCount As Integer) As MyObj()
Dim i As Integer
Dim temparray() As MyObj
ReDim temparray(MaxCount) As MyObj
For i = 0 To MaxCount
Set temparray(i) = New MyObj
Next i
CreateMyObjArray = temparray
End Function
Теперь, когда я называю это из C# после прохождения в массиве по
Array InData = m_MyObjGenerator.CreateMyOjbArray(5);
Я получаю system.argumentexceptionerror где сообщение
«Исключение type 'System.ArgumentException' было выбрано. \ r \ nПараметр: typeName @ 0 "
Я также получаю эту ошибку, если у моей функции нет параметров. Функция работает в VB из формы. Аналогично, следующая функция возвращает MyObj просто отлично
Public Function CreateMyObj() As MyObj
Set CreateMyObj = New MyObj
End Function
Я знаю, что может составить список нового MyObj годов в C# версии, а затем .ToArray(), но я бы очень хотел, чтобы получить эту работу. Благодарю.
Решение Обнаружено, как это сделать. Мне пришлось использовать tlbimp.exe без флага/sysarray (который VS должен использовать внутри). После этого я смог все правильно работать. Спасибо за помощь, ребята!
VS импортирует его как system.array, второй фрагмент кода приводит к ошибке компилятора. Спасибо за помощь. – Steve
Да, я бы не ожидал, что он скомпилируется, потому что «MyObj» - это просто место для вашего реального типа. Чтобы пройти через System.Array, попробуйте использовать Object [], чтобы получить визуальную студию, чтобы указать тип одного элемента в массиве. –