Partager via


Types blittables et non blittables

Mise à jour : novembre 2007

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é. Ces types sont appelés des types blittables car ils ne nécessitent pas de conversion lorsqu'ils sont passés entre le code managé et le code non managé.

Les types suivants issus de l'espace de noms System sont des types blittables :

Les types complexes suivants sont également des types blittables :

  • Les tableaux unidimensionnels de types blittables tels qu'un tableau d'entiers. Toutefois, un type qui contient un tableau de variables de types blittables n'est pas lui-même blittable.

  • Les 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). Pour plus d'informations sur les types valeur mis en forme, consultez Marshaling par défaut pour les types valeur.

Les références d'objets ne sont pas blittables. Cela inclut un tableau de références aux objets qui sont blittables en eux-mêmes. 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.

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. Ces types semblent être marshalés en tant que paramètres en entrée/sortie lorsque l'appelant et l'appelé résident dans le même apartment (cloisonné). 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.

Certains types de données managées requièrent une représentation différente dans un environnement non managé. Ces types de données non blittables doivent être convertis en un formulaire qui peut être marshalé. Par exemple, les chaînes managées sont des types non blittables parce qu'ils doivent être convertis en objets de type chaîne avant qu'ils puissent être marshalés.

Le tableau suivant répertorie des types non blittables issus de l'espace de noms System : 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.

Type non blittable

Description

System.Array

Convertit en tableau de style C ou en SAFEARRAY.

System.Boolean

Convertit en valeur de 1, 2, ou 4 octets, la valeur true ayant pour valeur 1 ou -1.

System.Char

Convertit en caractère ANSI ou Unicode.

System.Class

Convertit en interface de classe.

System.Object

Convertit en interface ou en variant.

System.Mdarray

Convertit en tableau de style C ou en SAFEARRAY.

System.String

Convertit en chaîne se terminant par une référence null ou en BSTR.

System.Valuetype

Convertit en structure avec une disposition en mémoire fixe.

System.Szarray

Convertit en tableau de style C ou en SAFEARRAY.

Les types d'objets et de classes sont pris en charge uniquement par COM interop. Pour obtenir les types correspondants dans Visual Basic 2005, C# et C++, consultez Vue d'ensemble de la bibliothèque de classes du .NET Framework.

Voir aussi

Autres ressources

Comportement de marshaling par défaut