Personalizando COM Callable Wrappers
Personalizando um COM callable wrapper é uma tarefa simples.Se o tipo você deseja expor para um cliente COM tiver requisitos de marshaling diferente do padrão, aplicar o System.Runtime.InteropServices.MarshalAsAttribute o atributo a um parâmetro de método, o campo classe, ou retornar o valor para alterar o comportamento de marshaling.
sistema autônomo mostra a ilustração a seguir, você pode exportar uma DLL gerenciado sem Personalizando o invólucro (mostrado à esquerda).Ou você pode adicionar informações de marshaling à fonte de, compilá-lo e usar o Tipo biblioteca Exporter (Tlbexp.exe) Exportar DLL modificada e produzir um wrapper personalizado.
Informações de marshaling de DLLs exportadas
Observação: |
---|
Todas gerenciado de tipos, métodos, propriedades, campos e eventos que você deseja expor para COM deve ser pública.Tipos devem ter um construtor público padrão, que é o construtor somente pode ser chamado por meio de COM.Para obter informações adicionais, consulte Qualificação de tipos do .NET para interoperação.. |
Quando dados entre o marshaling gerenciados e código não gerenciado, interop marshaler deve reconhecer as representações de dados sendo passado:
For blittable tipos, gerenciado e representações são sempre os mesmos.Por exemplo, um inteiro de 4 byte sempre é empacotado para um inteiro de 4 byte.Interop marshaler usa o gerenciado assinatura para determinar a representação de dados.
For não blittable tipos, interop marshaler reconhece a representação gerenciado da sua assinatura do método, mas não pode fazer o mesmo para a representação não gerenciada.Para realizar realizar marshaling tipos blittable não, você pode usar uma das seguintes técnicas:
Permitir que o marshaler inferir a representação da representação gerenciada.
Forneça explicitamente a representação de dados não gerenciados.
Por exemplo, uma seqüência de caracteres é convertida para um BSTR tipo quando empacotados do código gerenciado para não gerenciado, a menos que explicitamente se aplicam a MarshalAsAttribute para realizar realizar marshaling a seqüência de caracteres para outro tipo, sistema autônomo LPWSTR.Você pode aplicar esse atributo para um parâmetro, campo, ou valor retornado fonte de definição de tipo, sistema autônomo mostrado nos exemplos a seguintes.
Aplicar o MarshalAsAttribute a um parâmetro
Public Sub M1
(<MarshalAs(UnmanagedType.LPWStr)> msg As String)
public void M1
([MarshalAs(UnmanagedType.LPWStr)]String msg);
Aplicar o MarshalAsAttribute a um campo dentro de uma classe
Class MsgText
<MarshalAs(UnmanagedType.LPWStr)> Public msg As String
End Class
class MsgText {
[MarshalAs(UnmanagedType.LPWStr)] Public String msg;
}
Aplicar o MarshalAsAttribute a um valor retornado
Public Function M2() _
As <MarshalAs(UnmanagedType.LPWStr)> String
[return: MarshalAs(UnmanagedType.LPWStr)]
public String GetMessage();
conjunto o System.Runtime.InteropServices.UnmanagedType enumeração para indicar o formato desejado do tipo não gerenciado. sistema autônomo assinaturas anteriores, msg dados são empacotados sistema autônomo um buffer de () caracteres Unicode terminada com caractere nuloLPWStr).
Às vezes, interop marshaler requer que mais informações que são fornecidas pelo formato de dados gerenciado e não gerenciado.Para realizar realizar marshaling uma matriz, por exemplo, você deve fornecer o tipo de elemento, posição, dimensionar e limites da matriz.Você pode usar o MarshalAsAttribute para especificar informações adicionais necessárias.
Consulte também
Conceitos
Personalizando o tempo de execução Callable Wrappers
Referência
Personalizando COM Callable Wrappers