Compartilhar via


Visão geral do empacotamento (marshaling)

The .NET Compact Framework versão 2,0 Fornece suporte de marshaling expandido por meio de IDispatch e por meio de invocação de plataforma e chamadas vtable. Esse suporte inclui o seguinte:

  • Usando o MarshalAsAttribute atributo.

  • marshaling de tipos variantes que são suportados em Windows Embedded CE.

  • Empacotamento de tipos que chamam interfaces COM através de uma vtable.

  • Empacotamento de estruturas com matrizes e sequências embarcadas.

  • Especificar o layout de uma estrutura.

Você pode empacotar os seguintes tipos por valor ou por referência:

  • BStr

  • IUnknown

  • IDispatch

  • SafeArray

  • DateTime (empacotado sistema autônomo uma OLE DATE)

  • Variant

Observe que o .NET Compact Framework 2,0 oferece suporte a AllocHGlobal e FreeHGlobal métodos.

Log de Interoperabilidade

Você pode criar arquivos de log das assinaturas das funções para ver como uma chamada Interop é empacotada.Para obter mais informações sobre como criar os arquivos, consulte Como: Criar arquivos de log. Para obter informações sobre como interpretar os arquivos de log, consulte Informações de arquivo de log.

marshaling de diferenças com o .NET estrutura completo

The .NET Compact Framework não suporta os seguintes recursos de marshaling e interoperabilidade fornecidos no completo .NET Framework:

  • marshaling personalizado.

  • Obter um delegado gerenciado de um ponteiro de função nativa usando o GetDelegateForFunctionPointer método. Entretanto, você pode criar um ponteiro de função nativo a partir de um delegado gerenciado.

  • Acessando .NET Compact Framework classes de componentes nativo.

  • Passar estruturas (VT_RECORD) através de IDispatch.

  • Passar tipos Int64 e UInt64 através de IDispatch.

The .NET Compact Framework difere completo .NET Framework em comportamentos de marshaling a seguir:

  • The .NET Compact Framework permite que matrizes de valores SCODE ser empacotado completo .NET Framework não ocorre.

  • The .NET Compact Framework empacota matrizes de ponteiros IUnknown e IDispatch diferente completo .NET Framework.

  • The .NET Compact Framework inicializa todos sistema autônomo threads sistema autônomo multithread apartments e não oferece suporte a outros modelos de threading ou definir um modelo de apartment. Conseqüentemente, a .NET Compact Framework não oferece suporte a ApartmentState propriedades ou métodos a seguir:

Empacotamento com a instrução Declare no Visual Basic

O Visual Basic Declare demonstrativo é uma alternativa para declare referências a procedimentos externos em uma DLL. Observe que Ansi Não há suporte para a palavra-chave na demonstrativo Declare.

marshaling com o Declare demonstrativo é idêntica de marshaling com o DllImportAttribute classe, exceto para ByVal String objetos. In a Declare statement, a ByVal String parameter will be marshaled as an output parameter.Como seqüências de caracteres são imutáveis, isso força o Common linguagem tempo de execução para copiar a seqüência de caracteres e retornar uma nova referência.

Diferenças entre IDispatch e empacotadores de invocação de plataforma

A tabela a seguir lista os tipos que são empacotados de forma diferente pelos dois empacotadores.

Type (Tipo)

IDispatch

Invocação de plataforma e vtable

String

BStr

wchar *

Object

Variant

NULL

Boolean

VARIANT_BOOL

Byte

Array

SafeArray

Matriz estilo C

The .NET Compact Framework empacota uma classe por meio de invocação de plataforma sem a StructLayoutAttribute sistema autônomo um layout automático estrutura; completo .NET Framework empacota-lo sistema autônomo um COM callable wrapper (CCW).

Observe que o .NET Compact Framework marcas de um SafeArray com FADF_FIXEDSIZE e lança uma exceção se você redimensioná-lo em código nativo.

Em situações em que Boolean Converte um tipo de byte nativa, você não pode realizar realizar marshaling Boolean sistema autônomo um tipo de retorno; você pode empacotá-lo apenas sistema autônomo um argumento.

Empacotamento de Delegados

Por padrão, delegados são empacotados como ponteiros de função.Você também pode usar explicitamente a FunctionPtr o valor das UnmanagedType enumeração para criar uma instância das MarshalAsAttribute. Consulte Empacotamento de Delegados como Ponteiros de função para obter exemplos.

Especificando um conjunto de caracteres

Você pode usar o CharSet campo de DllImportAttribute Para especificar um conjunto de caracteres invocar quando se faz o marshaling de strings através de plataforma.

The .NET Compact Framework suporta os dois valores a seguir:

  • Auto.Seqüências de caractere são empacotadas usando o apropriado conjunto de caractere para o sistema operacional, que é o Unicode conjunto de caractere.Este é o valor padrão.

  • Unicode.Seqüências de caractere são empacotadas usando o conjunto de caractere Unicode.

The Ansi valor não é suportado pois Windows Embedded CE só é Unicode. None é equivalente a Ansi e não é suportado.

Porque o .NET Compact Framework não oferece suporte a ExactSpelling campo, o Common linguagem tempo de execução automaticamente procura uma entrada aponte segundo para os valores especificados pelo CharSet.

Marcação de Objeto

Quando o .NET Compact Framework Common linguagem tempo de execução Empacota um objeto, o objeto é fixado para a duração da plataforma chama chamadas para garantir que o coletor de lixo não disponível ou mover o objeto.

Uso de memória

Use as diretrizes a seguir para manipular memória com código não gerenciado no .NET Compact Framework:

  • Sempre alocar memória em código gerenciado e depois passar para código não gerenciado.

  • Se código não gerenciado contém um ponteiro para um componente gerenciado, você deve manualmente marcar o objeto usando o GCHandle estrutura.

The .NET Compact Framework Common linguagem tempo de execução coinitializes threads na inicialização e co-finaliza eles no desligado. Threads são marcados sistema autônomo "threading disponível".

Consulte também

Tarefas

Como: Criar arquivos de log

Conceitos

Informações de arquivo de log

Outros recursos

Interoperabilidade no .NET Compact Framework