Implementando a interface ICustomMarshaler

Para usar um empacotador personalizado, você deve aplicar o MarshalAsAttribute atributo ao parâmetro ou do campo sendo empacotado. O atributo identifica o empacotador personalizado que ativa o wrapper apropriado.

O empacotador personalizado implementa o Interface ICustomMarshaler interface para fornecer os wrappers apropriados para o time de execução, criando o empacotador personalizado na primeira vez que um argumento precisa ser empacotado.Ele chama o MarshalNativeToManaged and MarshalManagedToNative métodos o empacotador personalizado para ativar o wrapper correto para lidar com a telefonar.A tabela a seguir descreve cada método exposto pelo ICustomMarshaler interface.

Método de interface

Descrição

MarshalNativeToManaged

Retorna um personalizado tempo de execução callable wrapper que é possível realizar realizar marshaling a interface não gerenciada passada sistema autônomo um argumento.O empacotador deve retornar uma instância do personalizado tempo de execução callable wrapper para esse tipo.

MarshalManagedToNative

Retorna um personalizados COM callable wrapper que é possível realizar realizar marshaling a interface gerenciada passada sistema autônomo um argumento.O empacotador deve retornar uma instância do personalizado COM callable wrapper para o tipo.

CleanUpNativeData

Oferece uma oportunidade para o empacotador personalizado executar qualquer limpeza necessária do wrapper retornado pelo MarshalManagedToNative método.

CleanUpManagedData

Oferece uma oportunidade para o empacotador personalizado executar qualquer limpeza necessária do wrapper retornado pelo MarshalNativeToManaged método.

GetInstance

Recupera uma instância do empacotador personalizado.Esse método estático pode criar uma nova instância do empacotador personalizado sempre ou ele pode usar o mesmo sempre se empacotador personalizado é sem monitoração de estado.O método é chamado pelo serviço de marshaling para criar o empacotador sempre que um parâmetro ou o campo é marcado com o UnmanagedType.CustomMarshaler.

Consulte também

Conceitos

Definindo o tipo de marshaling

Usando um empacotador de substituir

Outros recursos

Empacotamento personalizado