Freigeben über


Für Blitting geeignete und nicht geeignete Typen

Die meisten Datentypen weisen eine gemeinsame Darstellung sowohl im verwalteten als auch im nicht verwalteten Speicher auf und erfordern keine spezielle Behandlung durch den Interop-Marshaller. Diese Typen werden als blittbare Typen bezeichnet, da sie keine Konvertierung erfordern, wenn sie zwischen verwaltetem und nicht verwaltetem Code übergeben werden.

Strukturen, die von Plattformaufrufen zurückgegeben werden, müssen blitfähige Typen sein. Plattformaufruf unterstützt keine nicht-blittfähigen Strukturen als Rückgabetypen.

Die folgenden Typen aus dem System-Namespace sind blittbare Typen.

Die folgenden komplexen Typen zählen ebenfalls zu den blitfähigen Typen:

  • Eindimensionale Arrays von für Blitting geeigneten primitiven Typen, z. B. ein Array von Integern: Ein Typ, der ein Array von Variablen blitfähiger Typen enthält, ist jedoch nicht selbst blitfähig.
  • Formatierte Werttypen, die nur blittbare Typen enthalten (und Klassen, wenn sie als formatierte Typen gemarshallt werden). Weitere Informationen zu formatierten Werttypen finden Sie unter Standardmäßiges Marshalling für Werttypen.

Objektverweise können nicht durchdunkt werden. Darüber hinaus ist ein Array von Verweisen auf Objekte, die von sich aus blittable sind, nicht blittable. Sie können z. B. eine Struktur definieren, die blittbar ist, aber Sie können keinen blittbaren Typ definieren, der ein Array von Verweisen auf diese Strukturen enthält.

Zur Optimierung werden Arrays von blittable primitiven Typen und Klassen, die nur blittable Member enthalten, beim Marshalling angeheftet statt 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-blittable Datentypen müssen in eine Form konvertiert werden, die marshalled werden kann. Verwaltete Zeichenfolgen sind beispielsweise nicht blitbare Typen, da sie in Zeichenfolgenobjekte konvertiert werden müssen, bevor sie gemarshallt werden können.

In der folgenden Tabelle sind nicht teilbare Typen aus dem System Namespace aufgeführt. Delegaten, die Datenstrukturen sind, die auf eine statische Methode oder eine Klasseninstanz verweisen, sind ebenfalls nicht-blittfähig.

Nicht-blittable 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.

Siehe auch