Dela via


Blittable- och Icke-blittable-typer

De flesta datatyper har en gemensam representation i både hanterat och ohanterat minne och kräver inte särskild hantering av interop-marshallern. Dessa typer kallas blittable-typer eftersom de inte kräver konvertering när de skickas mellan hanterad och ohanterad kod.

Strukturer som returneras från plattformsanrop måste vara blittable-typer. Plattformsanrop stöder inte icke-blittable-strukturer som returtyper.

Följande typer från System namnområdet är blittable-typer:

Följande komplexa typer är också blittable-typer:

  • Endimensionella matriser med blittable primitiva typer, till exempel en matris med heltal. En typ som innehåller en variabelmatris med blittable-typer är dock inte själv blittable.

  • Formaterade värdetyper som endast innehåller blittable-typer (och klasser om de är ordnade som formaterade typer). Mer information om formaterade värdetyper finns i Standard marshalling för värdetyper.

Objektreferenser är inte blittable. Detta inkluderar en matris med referenser till objekt som är blittable av sig själva. Du kan till exempel definiera en struktur som är blittable, men du kan inte definiera en blittable-typ som innehåller en matris med referenser till dessa strukturer.

Som en optimering fästs matriser med blittable primitiva typer och klasser som endast innehåller blittable-medlemmar i stället för kopierade under marshalling. Dessa typer kan se ut att vara marshalled som in-/ut-parametrar när anroparen och den som ringer är i samma lägenhet. De här typerna är dock i själva verket ordnade som In-parametrar, och du måste använda attributen InAttribute och OutAttribute om du vill konvertera argumentet som en in-/ut-parameter.

Vissa hanterade datatyper kräver en annan representation i en ohanterad miljö. Dessa icke-blittable-datatyper måste konverteras till ett formulär som kan ordnas. Hanterade strängar är till exempel icke-blittable-typer eftersom de måste konverteras till strängobjekt innan de kan ordnas.

I följande tabell visas icke-blittable-typer från System namnområdet. Ombud, som är datastrukturer som refererar till en statisk metod eller en klassinstans, är också icke-blittable.

Icke-blittable-typ beskrivning
System.Array Konverterar till en matris i C-format eller en SAFEARRAY.
System.Boolean Konverterar till ett värde på 1, 2 eller 4 byte med true värdet 1 eller -1.
System.Char Konverterar till ett Unicode- eller ANSI-tecken.
System.Class Konverterar till ett klassgränssnitt.
System.Object Konverterar till en variant eller ett gränssnitt.
System.Mdarray Konverterar till en matris i C-format eller en SAFEARRAY.
System.String Konverterar till en sträng som avslutas i en null-referens eller till en BSTR.
System.Valuetype Konverterar till en struktur med en layout för fast minne.
System.Szarray Konverterar till en matris i C-format eller en SAFEARRAY.

Klass- och objekttyper stöds endast av COM-interop. Motsvarande typer i Visual Basic, C#och C++, finns i Översikt över klassbibliotek.

Se även