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.
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, wenn diese als formatierte Typen gemarshallt wurden.
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.
Nicht blitfähige Typen sind in verwalteten und nicht verwalteten Sprachen unterschiedlich oder mehrdeutig dargestellt. Diese Typen müssen gegebenenfalls umgewandelt werden, wenn sie zwischen verwaltetem und nicht verwaltetem Code gemarshallt werden. Verwaltete Zeichenfolgen sind beispielsweise nicht blitfähige Typen, da sie über mehrere unterschiedliche nicht verwaltete Darstellungen verfügen, von denen einige gegebenenfalls auch umgewandelt werden müssen.
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. |
|
Konvertiert in eine Zeichenfolge, die auf einen NULL-Verweis (Nothing in Visual Basic) endet, oder in einen BSTR. |
|
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 Einführung in die .NET Framework-Klassenbibliothek.