Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Většina datových typů má společnou reprezentaci ve spravované i nespravované paměti a nevyžaduje zvláštní zpracování zprostředkovatele komunikace. Tyto typy se nazývají blittable types , protože nevyžadují převod, když jsou předány mezi spravovaným a nespravovaným kódem.
Struktury vrácené voláním platformy musí být blitelné typy. Platform Invoke nepodporuje neblitovatelné struktury jako návratové typy.
Následující typy z System oboru názvů jsou typy blittable:
- System.Byte
- System.SByte
- System.Int16
- System.UInt16
- System.Int32
- System.UInt32
- System.Int64
- System.UInt64
- System.IntPtr
- System.UIntPtr
- System.Single
- System.Double
Následující komplexní typy jsou také typy, které lze přímo kopírovat v paměti:
- Jednorozměrná pole přenositelných primitivních typů, například pole celých čísel. Typ obsahující proměnnou pole typů blittable však není sám o sobě blittable.
- Formátované typy hodnot, které obsahují pouze blittable typy (a třídy, pokud jsou zařazovány jako formátované typy). Další informace o formátovaných typech hodnot naleznete v tématu Výchozí zařazování pro typy hodnot.
Odkazy na objekty nejsou přímo mapovatelné. Kromě toho, pole odkazů na objekty, které jsou samy o sobě blittable, není samo o sobě blittable. Můžete například definovat strukturu, která je blittable, ale nemůžete definovat typu blittable, který obsahuje pole referencí na tyto struktury.
Při optimalizaci jsou pole primitivních typů a tříd, které obsahují pouze blittable členy, připnuté místo kopírování během zařazování. Tyto typy se můžou zdát zařazované jako parametry In/Out, pokud jsou volající a volaný ve stejném bytě. Tyto typy jsou však ve skutečnosti maršalovány jako In parametry, a pokud chcete maršalovat argument jako In/Out parametr, musíte použít InAttribute a OutAttribute atributy.
Některé spravované datové typy vyžadují v nespravovaném prostředí jinou reprezentaci. Tyto neblitovatelné datové typy musí být převedeny do formuláře, který lze zařašovat. Spravované řetězce jsou například neblitovatelné typy, protože je nutné je před jejich zařazením převést na objekty řetězců.
Následující tabulka uvádí neblitovatelné typy z System oboru názvů. Delegáti, což jsou datové struktury, které odkazují na statickou metodu nebo instanci třídy, jsou také neblitovatelné.
| Neblittable typ | Description |
|---|---|
| System.Array | Převede na pole ve stylu jazyka C nebo na SAFEARRAY. |
| System.Boolean | Převádí se na hodnotu o velikosti 1, 2 nebo 4 bajty s hodnotou true jako 1 nebo -1. |
| System.Char | Převede se na znak Unicode nebo ANSI. |
| System.Class | Převede na rozhraní dané třídy. |
| System.Object | Převede na variantu nebo rozhraní. |
| System.String | Převede na řetězec končící hodnotou null nebo na BSTR. |
| System.ValueType | Převede se na strukturu s pevným rozložením paměti. |
| T[] | Převede na pole ve stylu jazyka C nebo na SAFEARRAY. |
Typy tříd a objektů jsou podporovány pouze COM interoperabilitou.