Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A maioria dos tipos de dados tem uma representação comum tanto na memória gerida como na não gerida e não requer tratamento especial pelo marcador de interoperabilidade. Esses tipos são chamados de tipos blittable porque não exigem conversão quando são passados entre código gerenciado e não gerenciado.
As estruturas retornadas de chamadas de invocação de plataforma devem ser tipos blittable. Invocação de plataforma não suporta estruturas não blittáveis como tipos de retorno.
Os seguintes tipos do System namespace são tipos 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
Os seguintes tipos complexos também são tipos blittable:
- Matrizes unidimensionais de tipos primitivos blittable, como uma matriz de inteiros. No entanto, um tipo que contém uma matriz variável de tipos blittable não é em si blittable.
- Tipos de valor formatados que contêm apenas tipos blittable (e classes, se forem estruturadas como tipos formatados). Para obter mais informações sobre tipos de valor formatados, consulte Empacotamento padrão para tipos de valor.
As referências de objeto não são "blittable". Além disso, uma série de referências a objetos que são blittable por si só não é blittable. Por exemplo, você pode definir uma estrutura que seja blittable, mas não pode definir um tipo blittable que contenha uma matriz de referências a essas estruturas.
Como uma otimização, matrizes de tipos primitivos blittable e classes que contêm apenas membros blittable são fixadas em vez de copiadas durante o empacotamento. Esses tipos podem parecer ser organizados como parâmetros de entrada/saída quando o chamador e o destinatário estão no mesmo apartamento. No entanto, esses tipos são realmente empacotados como parâmetros In, e você deve aplicar os InAttribute atributos e OutAttribute se quiser empacotar o argumento como um parâmetro In/out.
Alguns tipos de dados gerenciados exigem uma representação diferente em um ambiente não gerenciado. Esses tipos de dados não blittable devem ser convertidos em um formulário que possa ser empacotado. Por exemplo, as strings geridas são tipos não-blittable, porque têm de ser convertidas em objetos de string antes de poderem ser empacotadas.
A tabela a seguir lista os tipos não-blittable no namespace System. Delegates, que são estruturas de dados que se referem a um método estático ou a uma instância de classe, também não são *blittable*.
| Tipo não 'blittable' (não convertível de forma direta) | Descrição |
|---|---|
| System.Array | Converte em uma matriz de estilo C ou em um SAFEARRAYarquivo . |
| System.Boolean | Converte para um valor de 1, 2 ou 4 bytes com true como 1 ou -1. |
| System.Char | Converte em um caractere Unicode ou ANSI. |
| System.Class | Converte em uma interface de classe. |
| System.Object | Converte em uma variante ou uma interface. |
| System.String | Converte em uma cadeia de caracteres que termina em uma referência nula ou em um BSTR. |
| System.ValueType | Converte em uma estrutura com um layout de memória fixa. |
| T[] | Converte em uma matriz de estilo C ou em um SAFEARRAYarquivo . |
Os tipos de classe e objeto são suportados apenas pela interoperabilidade COM.