types blittable et non blittableBlittable and Non-Blittable Types

La plupart des types de données ont une représentation commune à la fois dans la mémoire managée et non managée, et ne nécessitent pas de traitement particulier par le marshaleur d’interopérabilité.Most data types have a common representation in both managed and unmanaged memory and do not require special handling by the interop marshaler. Ces types sont appelés types blittables, car ils ne nécessitent pas de conversion quand ils transitent entre le code managé et le code non managé.These types are called blittable types because they do not require conversion when they are passed between managed and unmanaged code.

Les structures qui sont retournées par les appels de code non managé doivent être des types blittables.Structures that are returned from platform invoke calls must be blittable types. L’appel de code non managé ne prend en charge aucune structure non blittable comme type de retour.Platform invoke does not support non-blittable structures as return types.

Les types suivants issus de l’espace de noms System sont des types blittables :The following types from the System namespace are blittable types:

Les types complexes suivants sont également des types blittables :The following complex types are also blittable types:

  • Tableaux unidimensionnels de types blittables, comme un tableau d’entiers.One-dimensional arrays of blittable types, such as an array of integers. Toutefois, un type qui contient un tableau de variables de types blittables n’est pas lui-même blittable.However, a type that contains a variable array of blittable types is not itself blittable.

  • Types valeur mis en forme qui ne contiennent que des types blittables (et des classes s’ils sont marshalés comme types mis en forme).Formatted value types that contain only blittable types (and classes if they are marshaled as formatted types). Pour plus d’informations sur les types valeur mis en forme, consultez Marshaling par défaut pour les types valeur.For more information about formatted value types, see Default marshaling for value types.

Les références d’objets ne sont pas blittables.Object references are not blittable. Cela inclut un tableau de références aux objets qui sont blittables en eux-mêmes.This includes an array of references to objects that are blittable by themselves. Par exemple, vous pouvez définir une structure blittable, mais vous ne pouvez pas définir un type blittable contenant un tableau de références à ces structures.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.

Par souci d’optimisation, les tableaux de types et de classes blittables qui ne contiennent que des membres blittables sont épinglés au lieu d’être copiés lors du marshaling.As an optimization, arrays of blittable types and classes that contain only blittable members are pinned instead of copied during marshaling. Ces types semblent être marshalés en tant que paramètres en entrée/sortie quand l’appelant et l’appelé résident dans le même cloisonnement.These types can appear to be marshaled as In/Out parameters when the caller and callee are in the same apartment. Cependant, ces types sont en fait marshalés en tant que paramètres en entrée et vous devez appliquer les attributs InAttribute et OutAttribute si vous voulez marshaler l’argument en tant que paramètre en entrée/sortie.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.

Certains types de données managés requièrent une représentation différente dans un environnement non managé.Some managed data types require a different representation in an unmanaged environment. Ces types de données non blittables doivent être convertis sous une forme qui peut être marshalée.These non-blittable data types must be converted into a form that can be marshaled. Par exemple, les chaînes managées sont des types non blittables parce qu’elles doivent être converties en objets String avant de pouvoir être marshalées.For example, managed strings are non-blittable types because they must be converted into string objects before they can be marshaled.

Le tableau suivant répertorie des types non blittables issus de l’espace de noms System.The following table lists non-blittable types from the System namespace. Les délégués, qui sont des structures de données qui réfèrent à une méthode statique ou à une instance de classe, sont également non blittables.Delegates, which are data structures that refer to a static method or to a class instance, are also non-blittable.

Type non blittableNon-blittable type DescriptionDescription
System.ArraySystem.Array Convertit en tableau de style C ou en SAFEARRAY.Converts to a C-style array or a SAFEARRAY.
System.BooleanSystem.Boolean Convertit en valeur de 1, 2 ou 4 octets, la valeur true ayant pour valeur 1 ou -1.Converts to a 1, 2, or 4-byte value with true as 1 or -1.
System.CharSystem.Char Convertit en caractère ANSI ou Unicode.Converts to a Unicode or ANSI character.
System.ClassSystem.Class Convertit en interface de classe.Converts to a class interface.
System.ObjectSystem.Object Convertit en interface ou en variant.Converts to a variant or an interface.
System.MdarraySystem.Mdarray Convertit en tableau de style C ou en SAFEARRAY.Converts to a C-style array or a SAFEARRAY.
System.StringSystem.String Convertit en chaîne se terminant par une référence null ou en BSTR.Converts to a string terminating in a null reference or to a BSTR.
System.ValuetypeSystem.Valuetype Convertit en structure avec une disposition de mémoire fixe.Converts to a structure with a fixed memory layout.
System.SzarraySystem.Szarray Convertit en tableau de style C ou en SAFEARRAY.Converts to a C-style array or a SAFEARRAY.

Les types d’objets et de classes sont pris en charge uniquement par COM Interop.Class and object types are supported only by COM interop. Pour obtenir les types correspondants en Visual Basic, C# et C++, consultez Vue d’ensemble de la bibliothèque de classes .NET Framework.For corresponding types in Visual Basic, C#, and C++, see the Class Library Overview.

Voir aussiSee also