tipi copiabili e non copiabiliBlittable and Non-Blittable Types

La maggior parte dei tipi di dati ha una rappresentazione comune sia nella memoria gestita sia in quella non gestita e non richiede quindi una gestione particolare tramite il gestore di marshalling di interoperabilità.Most data types have a common representation in both managed and unmanaged memory and do not require special handling by the interop marshaler. Questi tipi sono definiti copiabili da BLT, poiché non richiedono la conversione quando vengono passati tra codice gestito e codice non gestito.These types are called blittable types because they do not require conversion when they are passed between managed and unmanaged code.

Le strutture restituite dalle chiamate platform invoke devono essere tipi copiabili da BLT.Structures that are returned from platform invoke calls must be blittable types. Platform invoke non supporta strutture non copiabili da BLT come tipi restituiti.Platform invoke does not support non-blittable structures as return types.

I tipi dello spazio dei nomi System elencati di seguito sono copiabili da BLT:The following types from the System namespace are blittable types:

Sono copiabili da BLT anche i tipi complessi seguenti:The following complex types are also blittable types:

  • Matrici unidimensionali di tipi copiabili da BLT, come una matrice di integer.One-dimensional arrays of blittable types, such as an array of integers. Non è tuttavia copiabile da BLT un tipo contenente una matrice variabile di tipi copiabili da BLT.However, a type that contains a variable array of blittable types is not itself blittable.

  • Tipi di valore formattati contenenti solo tipi copiabili da BLT (e classi, se sottoposti a marshalling come tipi formattati).Formatted value types that contain only blittable types (and classes if they are marshaled as formatted types). Per altre informazioni sui tipi di valore formattati, vedere Marshalling predefinito per i tipi di valore.For more information about formatted value types, see Default Marshaling for Value Types.

Non sono copiabili da BLT i riferimenti a oggetti,Object references are not blittable. incluse le matrici di riferimenti a oggetti che invece sono copiabili da BLT.This includes an array of references to objects that are blittable by themselves. È possibile, ad esempio, definire una struttura copiabile da BLT, ma non un tipo copiabile da BLT contenente una matrice di riferimenti alla struttura.For example, you can define a structure that is blittable, but you cannot define a blittable type that contains an array of references to those structures.

Per motivi di ottimizzazione, le matrici di tipi e classi copiabili da BLT contenenti solo membri copiabili da BLT vengono bloccate e non copiate durante il marshalling.As an optimization, arrays of blittable types and classes that contain only blittable members are pinned instead of copied during marshaling. Quando il chiamante e il chiamato si trovano nello stesso apartment, può sembrare che il marshalling di questi tipi venga eseguito come parametri In/Out.These types can appear to be marshaled as In/Out parameters when the caller and callee are in the same apartment. 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.However, these types are actually marshaled as In parameters, and you must apply the InAttribute and OutAttribute attributes if you want to marshal the argument as an In/Out parameter.

Alcuni tipi di dati gestiti richiedono una rappresentazione diversa in un ambiente non gestito.Some managed data types require a different representation in an unmanaged environment. Questi tipi di dati non copiabili da BLT devono essere convertiti in un formato di cui è possibile eseguire il marshalling.These non-blittable data types must be converted into a form that can be marshaled. Le stringhe gestite, ad esempio, sono tipi non copiabili da BLT perché devono essere convertite in oggetti stringa prima di poter eseguire il marshalling.For example, managed strings are non-blittable types because they must be converted into string objects before they can be marshaled.

Nella tabella seguente sono elencati i tipi non copiabili da BLT dello spazio dei nomi System.The following table lists non-blittable types from the System namespace. Anche i delegati, ossia le strutture di dati che fanno riferimento a un metodo statico o a un'istanza di classe, non sono copiabili da BLT.Delegates, which are data structures that refer to a static method or to a class instance, are also non-blittable.

Tipi non copiabili da BLTNon-blittable type DescrizioneDescription
System.ArraySystem.Array Viene convertito in una matrice di tipo C o in SAFEARRAY.Converts to a C-style array or a SAFEARRAY.
System.BooleanSystem.Boolean Viene convertito in un valore a 1, 2 o 4 byte con true pari a 1 o -1.Converts to a 1, 2, or 4-byte value with true as 1 or -1.
System.CharSystem.Char Viene convertito in un carattere Unicode o ANSI.Converts to a Unicode or ANSI character.
System.ClassSystem.Class Viene convertito in un'interfaccia di classe.Converts to a class interface.
System.ObjectSystem.Object Viene convertito in una variante o in un'interfaccia.Converts to a variant or an interface.
System.MdarraySystem.Mdarray Viene convertito in una matrice di tipo C o in SAFEARRAY.Converts to a C-style array or a SAFEARRAY.
System.StringSystem.String Viene convertito in una stringa che termina con un riferimento Null o un BSTR.Converts to a string terminating in a null reference or to a BSTR.
System.ValuetypeSystem.Valuetype Viene convertito in una struttura con un layout a memoria fissa.Converts to a structure with a fixed memory layout.
System.SzarraySystem.Szarray Viene convertito in una matrice di tipo C o in SAFEARRAY.Converts to a C-style array or a SAFEARRAY.

I tipi di classe e oggetto sono supportati solo dall'interoperabilità COM.Class and object types are supported only by COM interop. Per i tipi corrispondenti in Visual Basic 2005Visual Basic 2005, C# e C++, vedere Cenni preliminari sulla libreria di classi.For corresponding types in Visual Basic 2005Visual Basic 2005, C#, and C++, see the Class Library Overview.

Vedere ancheSee Also

Comportamento di marshalling predefinitoDefault Marshaling Behavior