Blitfähige und nicht blitfähige Typen
Die meisten Datentypen verfügen über gemeinsame Darstellungen im verwalteten und im nicht verwalteten Speicher. Für sie ist keine Sonderbehandlung durch den Interop-Marshaller erforderlich. Sie werden als blitfähige Typen bezeichnet, da sie bei der Übergabe von verwaltetem an nicht verwalteten Code nicht umgewandelt werden müssen.
Strukturen, die von Plattformaufrufen zurückgegeben werden, müssen blitfähige Typen sein. Nicht blitfähige Strukturen werden als Rückgabetypen für Plattformaufrufe nicht unterstützt.
Bei folgenden Typen aus dem System-Namespace handelt es sich um blitfähige Typen:
Außerdem sind auch die folgenden komplexen Typen blitfähige Typen:
Eindimensionale Arrays von blitfähigen Typen, z. B. Arrays von ganzen Zahlen. Ein Typ, der ein variables Array blitfähiger Typen enthält, ist jedoch nicht selbst blitfähig.
Formatierte Werttypen, die ausschließlich blitfähige Typen enthalten (und Klassen, wenn diese als formatierte Typen gemarshallt wurden). Weitere Informationen zu formatierten Werttypen finden Sie unter Standardmäßiges Marshalling für Werttypen.
Objektverweise sind nicht blitfähig. Dies schließt ein Array von Verweisen auf Objekte ein, die selbst blitfähig sind. Es ist zum Beispiel möglich, eine Struktur zu definieren, die blitfähig ist, jedoch können Sie keinen blitfähigen Typen definieren, der ein Array von Verweisen auf diese Strukturen enthält.
Zur Optimierung werden Arrays von blitfähigen Typen und Klassen, die ausschließlich blitfähige Member enthalten, nicht während des Marshallens kopiert, sondern fixiert. Wenn Aufrufer und Aufgerufener sich in demselben Apartment befinden, kann es den Anschein haben, dass diese Typen als In/Out-Parameter gemarshallt werden. Tatsächlich werden diese Typen jedoch als In-Parameter gemarshallt. Um das Argument als In/Out-Parameter zu marshallen, müssen Sie daher das InAttribute-Attribut und das OutAttribute-Attribut anwenden.
Einige verwaltete Datentypen erfordern eine andere Darstellung in einer nicht verwalteten Umgebung. Diese nicht blitfähige Datentypen müssen in ein Formular konvertiert werden, das gemarshallt werden kann. Bei verwalteten Zeichenfolgen handelt es sich zum Beispiel um nicht blitfähige Typen, da sie in Zeichenfolgenobjekte konvertiert werden müssen, bevor sie gemarschallt werden können.
In der folgenden Tabelle werden nicht blitfähige Typen aus dem System-Namespace aufgelistet. Delegaten, d. h. Datenstrukturen, die auf eine static-Methode oder eine Klasseninstanz verweisen, sind ebenfalls nicht blitfähig.
Nicht blitfähiger Typ |
Beschreibung |
---|---|
Wird in ein Array im C-Format oder ein SAFEARRAY umgewandelt. |
|
Wird in einen Wert mit 1, 2 oder 4 Bytes mit true als 1 oder –1 konvertiert. |
|
Wird in ein Unicode- oder ANSI-Zeichen umgewandelt. |
|
Wird in eine Klassenschnittstelle umgewandelt. |
|
Wird in eine Variante oder Schnittstelle umgewandelt. |
|
Wird in ein Array im C-Format oder ein SAFEARRAY umgewandelt. |
|
Wird in BSTR oder in eine Zeichenfolge konvertiert, die in einem Nullverweis endet. |
|
Wird in eine Struktur mit einem festen Speicherlayout umgewandelt. |
|
Wird in ein Array im C-Format oder ein SAFEARRAY umgewandelt. |
Klassen und Objekttypen werden nur von COM-Interop unterstützt. Informationen zu entsprechenden Typen in Visual Basic 2005, C# und C++ finden Sie unter Übersicht über die .NET Framework-Klassenbibliothek.
Siehe auch
Weitere Ressourcen
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
Mai 2010 |
Erläutert, dass die Einschränkung für Rückgabetypen für Strukturen gilt. |
Korrektur inhaltlicher Fehler. |