Return array von Objekten, die von VB6 zu C# mit Interop
Ich muss ein array zurückgeben, der initialisierte Objekte von VB6 in C# unter Verwendung von interop. Meine VB-Funktion sieht wie
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
Nun, wenn ich das von C# nach der übergabe des Arrays
Array InData = m_MyObjGenerator.CreateMyOjbArray(5);
Bekomme ich eine system.argumentexceptionerror, wo die Nachricht ist
"Ausnahme vom Typ 'System.ArgumentException' wurde ausgelöst.\r\nParameter name: typeName@0"
Ich bekomme auch diese Fehlermeldung, wenn die Funktion hat keine Parameter. Die Funktion funktioniert in VB aus einem Formular. Ebenso die folgende Funktion gibt eine MyObj gerade fein
Public Function CreateMyObj() As MyObj
Set CreateMyObj = New MyObj
End Function
Ich weiß, dass ich eine Liste machen kann mit new MyObj ' s in der C# - version und dann .ToArray (), aber ich würde wirklich gerne diese arbeiten. Danke.
Lösung
Finden Sie heraus, wie Sie es tun. Ich musste tlbimp.exe ohne /sysarray Flagge (VS muss intern). Danach war ich in der Lage, um alles richtig funktioniert. Vielen Dank für die Hilfe Jungs.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten aus-let ' s clean up, dass VB ein bisschen:
Schließlich C# sollte wie folgt Aussehen:
Wo MyObj ist marshalled-Typ verwenden, wenn im Gespräch mit Ihrer vb-code. Wie andere poster vorgeschlagen haben, können Sie es zu
Object
und Schritt auf es zu lassen, Visual Studio erzählen Sie, welche Art zu verwenden, genau.Tut mir Leid, dass ich kann nicht Sie versuchen, einige code, um wirklich helfen Sie dieses Problem lösen.
Gesagt haben, dass, gesetzt InData werden, um ein Objekt ein.
Object InData = m_MyObjGenerator.CreateMyOjbArray(5);
Nachdem diese Anweisung ausgeführt wird, verwenden Sie das watch-Fenster, um zu bestimmen, die Art der InData.
Ändern Sie den code (ändern Sie den Typ von InData von Objekt der Art, die Sie vor dem verwenden der Uhr Fenster).
Hoffe, das hilft.