Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La maggior parte dei tipi di dati ha una rappresentazione comune sia nella memoria gestita che in quella non gestita e non richiede una gestione speciale da parte del marshaller di interoperabilità. Questi tipi sono chiamati tipi blittabili perché non richiedono conversione quando vengono passati tra codice gestito e non gestito.
Le strutture restituite dalle chiamate Platform Invoke devono essere di tipi blittabili. Platform invoke non supporta strutture non copiabili come tipi restituiti.
I seguenti tipi dello spazio dei nomi System sono tipi 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
Sono anche tipi blittabili i seguenti tipi complessi:
- Matrici unidimensionali di tipi primitivi copiabili da BLT, come una matrice di integer. Tuttavia, un tipo che contiene un array variabile di tipi blittable non è esso stesso blittable.
- Tipi di valore formattati che contengono solo tipi blittable copiabili (e classi se vengono sottoposte a marshalling come tipi formattati). Per ulteriori informazioni sui tipi di valore formattati, vedere marshalling predefinito per i tipi di valore.
I riferimenti agli oggetti non sono blittabili. Inoltre, un array di riferimenti a oggetti blittabili per conto proprio non è blittabile. Ad esempio, è possibile definire una struttura blittable, ma non è possibile definire un tipo blittable che contenga un array di riferimenti a tali strutture.
Come ottimizzazione, le matrici di tipi primitivi blittabili e le classi che contengono solo membri blittabili vengono pinnate anziché copiate durante il marshalling. Quando il chiamante e il chiamato si trovano nello stesso ambiente, può sembrare che il marshalling di questi tipi venga eseguito come parametri di input/output. Il marshalling di questi tipi, in realtà, viene eseguito come parametri in ed è necessario applicare gli attributi InAttribute e OutAttribute se si vuole eseguire il marshalling dell'argomento come parametro in/out.
Alcuni tipi di dati gestiti richiedono una rappresentazione diversa in un ambiente non gestito. Questi tipi di dati non visualizzabili devono essere convertiti in un modulo di cui è possibile eseguire il marshalling. Le stringhe gestite, ad esempio, sono tipi non blittable perché devono essere convertite in oggetti stringa prima di poter essere sottoposti a marshalling.
Nella tabella seguente sono elencati i tipi non blittable dallo spazio dei nomi System. I delegati, ovvero strutture di dati che fanno riferimento a un metodo statico o a un'istanza di classe, sono anche non modificabili.
| Tipo non blittabile | Descrizione |
|---|---|
| System.Array | Viene convertito in una matrice di tipo C o in SAFEARRAY. |
| System.Boolean | Viene convertito in un valore a 1, 2 o 4 byte con true pari a 1 o -1. |
| System.Char | Viene convertito in un carattere Unicode o ANSI. |
| System.Class | Viene convertito in un'interfaccia di classe. |
| System.Object | Viene convertito in una variante o in un'interfaccia. |
| System.String | Si converte in una stringa terminante con un riferimento null o in un BSTR. |
| System.ValueType | Viene convertito in una struttura con una memoria a disposizione fissa. |
| T[] | Viene convertito in una matrice di tipo C o in SAFEARRAY. |
I tipi di classe e oggetto sono supportati solo dall'interoperabilità COM.