2016-08-05 91 views
2

Ich habe einen dynamischen Methodenaufruf zu einem COM-Objekt. Wenn ich versuche, Rückkehr das Ergebnis als byte [], erhalte ich die folgende Ausnahme:.NET-Byte-Array COM-Casting-Problem

System.InvalidCastException: Kann nicht das Objekt des Typs ‚System.Byte [*]‘ werfen ‚System.Byte []‘ eingeben

Jede Hilfe wäre willkommen.

+1

, was passieren wird, wenn Sie ein Array mit einer Nicht-Null unterer Schranke erstellt haben. Was macht das COM-Objekt? –

+0

Es wird ein Dokument von einem Speicheranbieter als Array byte [] abgerufen. Diese COM-Komponente ist eine Blackbox. Kein Zugriff auf die Quelle. Gibt es eine Möglichkeit, das zu beheben? – c0D3l0g1c

Antwort

1

Die COM-Objekt-Methode scheint in Ihrem Fall ein Array mit einer unteren Grenze ungleich Null zurückzugeben. Sie können einen normalen Byte-Array erstellen und kopieren Sie dann die Daten aus dem ersten Array wie folgt:

var comArray = (Array)(object)comObject.CallToComObject(); 

byte[] data = new byte[comArray.Length]; 

Array.Copy(comArray, data, data.Length); 

Ich bin nicht sicher, ob es eine Möglichkeit, das Kopieren zu vermeiden ist.

EDIT:

Aus einem Grund mir unbekannt, wenn die Nicht-Null untere Schranke Array in einer dynamischen Art und Weise zurückgeführt wird, dh die Unterschrift von CallToComObject hat einen dynamic Rückgabewert Typ, dann eine Ausnahme wird geworfen, wenn wir einfach versuchen, es als Array zu werfen. Casting es zu einem object zuerst scheint das Problem zu lösen. Ich weiß nicht warum.

+0

Fehler in Zeile 2 oben, mit derselben Ausnahme wie zuvor gemeldet. Ich habe nicht var comArray, ich habe dynamische comArray. – c0D3l0g1c

+0

@ c0D3l0g1c, ich habe die Antwort aktualisiert, versuche den Rückgabewert auf 'object' und dann auf' Array' zu übertragen. –