Für Blitting geeignete und nicht geeignete Typen
Die meisten Datentypen verfügen über eine allgemeine Darstellung in verwaltetem und unverwaltetem Speicher und erfordern keine besondere Behandlung durch den Interop-Marshaller. Diese Typen werden blitfähige Typen genannt, da keine Konvertierung erforderlich ist, wenn sie zwischen verwaltetem und nicht verwaltetem Code übergeben werden.
Strukturen, die von Plattformaufrufen zurückgegeben werden, müssen blitfähige Typen sein. Der Plattformaufruf unterstützt keine nicht blitfähigen Strukturen als Rückgabetypen.
Die folgenden Typen aus dem System-Namespace sind blitfähige Typen:
Die folgenden komplexen Typen sind ebenfalls blitfähige Typen:
Eindimensionale Arrays von für Blitting geeigneten primitiven Typen, z. B. ein Array von Integern: Ein Typ, der ein Variablenarray von blitfähigen Typen enthält, ist jedoch nicht selbst blitfähig.
Formatierte Werttypen, die ausschließlich für Blitting geeignete Typen (oder Klassen, wenn sie als formatierte Typen gemarshallt werden) enthalten. Weitere Informationen zu formatierten Werttypen finden Sie unter Standardmäßiges Marshalling für Werttypen.
Objektverweise sind nicht für Blitvorgänge geeignet. Dies schließt ein Array von Verweisen auf Objekte ein, die selbst für Blitting geeignet sind. Beispielsweise können Sie eine Struktur definieren, die für Blitting geeignet ist, jedoch keine blitfähigen Typen, die ein Array von Verweisen auf diese Strukturen enthält.
Zur Optimierung werden Arrays von für Blitting geeigneten primitiven Typen und Klassen, die nur für Blitting geeignete Member enthalten, während des Marshalling angeheftet und nicht kopiert. Es kann so wirken, als ob diese Typen als In/Out-Parameter gemarshallt werden, wenn der Aufrufer und der Aufgerufene im selben Apartment sind. Allerdings werden diese Typen tatsächlich als In-Parameter gemarshallt, und Sie müssen die InAttribute- und OutAttribute-Attribute anwenden, wenn Sie das Argument als In/Out-Parameter gemarshallt haben möchten.
Einige verwaltete Datentypen erfordern eine andere Darstellung in einer nicht verwalteten Umgebung. Diese nicht für Blitting geeigneten Datentypen müssen in ein Format konvertiert werden, das gemarshallt werden kann. Beispielsweise sind verwaltete Zeichenfolgen nicht Blitting geeignete Typen, da sie in Zeichenfolgenobjekte konvertiert werden müssen, bevor sie gemarshallt werden können.
Die folgende Tabelle listet nicht blitfähige Typen aus dem System-Namespace auf. Delegaten sind Datenstrukturen, die auf eine statische Methode oder auf eine Klasseninstanz verweisen, und sind nicht blitfähig.
Nicht blitfähiger Typ | Beschreibung |
---|---|
System.Array | Konvertiert in ein Array im C-Format oder ein SAFEARRAY . |
System.Boolean | Konvertiert in einen 1-, 2- oder 4-Byte-Wert mit true als 1 oder -1. |
System.Char | Konvertiert in ein Unicode- oder ANSI-Zeichen. |
System.Class | Konvertiert in eine Klassenschnittstelle. |
System.Object | Konvertiert in eine Variante oder eine Schnittstelle. |
System.String | Konvertiert in eine Zeichenfolge, die in einem NULL-Verweis oder in einem BSTR endet. |
System.ValueType | Konvertiert in eine Struktur mit einem festen Speicherlayout. |
T[] | Konvertiert in ein Array im C-Format oder ein SAFEARRAY . |
Klassen und Objekttypen werden nur von COM-Interop unterstützt. Informationen zu den entsprechenden Typen in Visual Basic, C# und C++ finden Sie unter Übersicht über die Klassenbibliothek.