Compartir a través de


Tipos Blittable y No-Blittable

La mayoría de los tipos de datos tienen una representación común en la memoria administrada y no administrada y no requieren un control especial por parte del serializador de interoperabilidad. Estos tipos se denominan tipos blittables porque no requieren conversión cuando se pasan entre código administrado y no administrado.

Las estructuras que se devuelven de llamadas de invocación de plataforma deben ser tipos que pueden transferirse en bloque de bits. La invocación de plataforma no admite estructuras no accesibles como tipos de valor devuelto.

Los siguientes tipos del espacio de nombres System son tipos directamente transferibles:

Los siguientes tipos complejos también son tipos que pueden transferirse en bloque de bits:

  • Arreglos unidimensionales de tipos primitivos que se pueden transferir como bits, como un arreglo de enteros. Pero un tipo que contiene una matriz variable de tipos blitteables no es blitteable.
  • Tipos de valor con formato que contienen solo tipos blittable (y clases si se marshallen como tipos con formato). Para obtener más información sobre los tipos de valor con formato, consulte Serialización predeterminada para tipos de valor.

Las referencias de objeto no se pueden transferir en bloque. Además, una matriz de referencias a objetos que se pueden dividir por sí mismos no es de tipo blittable. Por ejemplo, puede definir una estructura que sea blitable, pero no puede definir un tipo blitable que contenga una matriz de referencias a esas estructuras.

A modo de optimización, las matrices de tipos primitivos blittable y las clases que solo contienen miembros blittable se anclan en lugar de copiarse durante la interoperación. Estos tipos pueden parecer aglutinados como parámetros de entrada/salida cuando el llamador y el receptor están en el mismo apartamento. Sin embargo, estos tipos realmente se marshalizan como parámetros de entrada, y se deben aplicar los atributos InAttribute y OutAttribute si se desea marshalizar el argumento como parámetro de entrada/salida.

Algunos tipos de datos administrados requieren una representación diferente en un entorno sin administrar. Estos tipos de datos no permitidos se deben convertir en un formulario que se pueda serializar. Por ejemplo, las cadenas administradas son tipos no blittable porque deben convertirse en objetos tipo cadena antes de que se puedan empaquetar.

En la tabla siguiente se enumeran los tipos no accesibles del System espacio de nombres. Los delegados, que son estructuras de datos que hacen referencia a un método estático o a una instancia de clase, también son no accesibles.

Tipo no blittable Descripción
System.Array Se convierte en un array de estilo C o en un SAFEARRAY.
System.Boolean Se convierte a un valor de uno, dos o cuatro bytes con true como 1 o -1.
System.Char Se convierte en un carácter Unicode o ANSI.
System.Class Se convierte a una interfaz de clase.
System.Object Se convierte a una variante o una interfaz.
System.String Se convierte a una cadena que termina en una referencia nula o a un tipo BSTR.
System.ValueType Se convierte en una estructura con un diseño de memoria fijo.
T[] Se convierte a una matriz de estilo de C o a una SAFEARRAY.

Solo se admiten los tipos de clase y objeto con la interoperabilidad COM.

Vea también