Frage

Ich habe eine Methode in .NET (C#) gibt string[][].Bei der Verwendung von RegAsm oder TlbExp (aus der .NET 2.0 SDK) zum erstellen einer COM-Typbibliothek für die mit der Montage, bekomme ich die folgende Warnung:

WARNUNG:Es ist kein Marshalling Unterstützung für verschachtelte arrays.

Diese Warnung Ergebnisse in der Methode in Frage, die nicht exportiert wird in die generierte Bibliothek Typ.Ich habe gesagt, es gibt Möglichkeiten, dieses über Variante der COM-return-Typ, und dann Gießen/etc auf dem COM-client-Seite.Für diese Besondere Versammlung, die Ziel-client Publikum ist VB6. Aber wie tun Sie es tatsächlich tun dies auf der .NET-Seite?

Hinweis:Ich habe eine vorhandene legacy-DLL (mit den exportierten Typ-Bibliothek), wo die return-type-Variante, aber diese DLL (und die .tlb) erzeugt wird pre-.NET legacy-tools, so kann ich Sie nicht benutzen.

Würde es helfen, wenn die Montage wurde geschrieben in VB.NET statt?

War es hilfreich?

Lösung

Auch wenn Sie auf ein Objekt wieder (die Karten, um eine Variante für COM-Interop), der nicht zu lösen Ihre problem.VB wird in der Lage sein, zu "halten" auf Sie und "pass it around", aber es wird nicht in der Lage sein, etwas zu tun.

Technisch gibt es keine genaue Entsprechung in VB für ein string[][].Allerdings, wenn Ihr array nicht "zackig" (, dass ist, alle sub-arrays die gleiche Länge), Sie sollten in der Lage sein zu verwenden Sie ein zweidimensionales array als Ihre zurück-Typ.COM-Interop sollte in der Lage sein, das zu übersetzen.

string [,] myReturnValue = new string[rowCount,colCount];

Ob Ihre Methode formal ein Objekt zurückgibt (die Aussehen wie eine Variante von VB -), oder eine Zeichenfolge [,] (, die Aussehen wird ein Array von Strings in VB), ist etwas immaterielles.Das String-array ist ein schöner zurückkehren, aber nicht Bedingung.

Wenn Sie array ist gezackte, dann sind Sie gehen zu müssen zu kommen mit einer anderen Methode.Für Beispiel, Sie könnte wählen, um Ihre Rückkehr 2D-array so groß wie die größte der sub-arrays, und dann übergeben Sie die Länge Informationen in eine separate [out] int[] parameter, so, dass VB können Sie wissen, welche Elemente verwendet werden.

Andere Tipps

Das entspricht der Variante in C# System.Objekt.So möchten Sie vielleicht zu versuchen, das Ergebnis zu werfen, um Objekt und Holen Sie es wieder zurück auf die andere Seite als eine Variante.

VB hat keine Einrichtungen, C#, fehlt, so bezweifle ich, es wäre besser oder leichter, wenn die .NET-Seite wurde geschrieben in VB.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top