Importando uma biblioteca de tipos como um assembly
As definições de tipo COM geralmente residem em uma biblioteca de tipos. Em contraste, compiladores compatíveis com CLS produzem metadados de tipo em um assembly. As duas fontes de informação de tipo são bastante diferentes. Este tópico descreve técnicas para gerar metadados a partir de uma biblioteca de tipos. O assembly resultante é chamado de assembly de interoperabilidade e as informações de tipo que ele contém permitem que os aplicativos do .NET Framework usem tipos COM.
Há duas maneiras de disponibilizar essas informações de tipo para seu aplicativo:
Usando assemblies de interoperabilidade somente em tempo de design: começando com o .NET Framework 4, você pode instruir o compilador a incorporar informações de tipo do assembly de interoperabilidade em seu executável. O compilador incorpora apenas as informações de tipo que seu aplicativo usa. Não é necessário implantar o assembly de interoperabilidade com seu aplicativo. Esta é a técnica recomendada.
Implantando assemblies de interoperabilidade: você pode criar uma referência padrão para o assembly de interoperabilidade. Nesse caso, o assembly de interoperabilidade deve ser implantado com seu aplicativo. Se você empregar essa técnica e não estiver usando um componente COM privado, sempre faça referência ao assembly de interoperabilidade primário (PIA) publicado pelo autor do componente COM que você pretende incorporar em seu código gerenciado. Para obter mais informações sobre como produzir e usar assemblies de interoperabilidade primária, consulte Assemblies de interoperabilidade primária.
Ao usar assemblies de interoperabilidade somente em tempo de design, você pode incorporar informações de tipo do assembly de interoperabilidade primário publicado pelo autor do componente COM. No entanto, não é necessário implantar o assembly de interoperabilidade primário com seu aplicativo.
O uso de assemblies de interoperabilidade somente em tempo de design reduz o tamanho do seu aplicativo, porque a maioria dos aplicativos não usa todos os recursos de um componente COM. O compilador é muito eficiente quando incorpora informações de tipo; se seu aplicativo usa apenas alguns dos métodos em uma interface COM, o compilador não incorpora os métodos não utilizados. Quando um aplicativo que tem informações de tipo incorporadas interage com outro aplicativo desse tipo, ou interage com um aplicativo que usa um assembly de interoperabilidade primário, o common language runtime usa regras de equivalência de tipo para determinar se dois tipos com o mesmo nome representam o mesmo tipo COM. Você não precisa conhecer essas regras para usar objetos COM. No entanto, se você estiver interessado nas regras, consulte Equivalência de tipo e tipos de interoperabilidade incorporados.
Geração de metadados
As bibliotecas de tipos COM podem ser arquivos autônomos com uma extensão .tlb, como Loanlib.tlb. Algumas bibliotecas de tipos são incorporadas na seção de recursos de um arquivo .dll ou .exe. Outras fontes de informações da biblioteca de tipos são arquivos .olb e .ocx.
Depois de localizar a biblioteca de tipos que contém a implementação do tipo COM de destino, você tem as seguintes opções para gerar um assembly de interoperabilidade contendo metadados de tipo:
Visual Studio
O Visual Studio converte automaticamente tipos COM em uma biblioteca de tipos em metadados em um assembly. Para obter instruções, consulte Como adicionar referências a bibliotecas de tipos.
Importador de biblioteca de tipos (Tlbimp.exe)
O Importador de Biblioteca de Tipos fornece opções de linha de comando para ajustar metadados no arquivo de interoperabilidade resultante, importa tipos de uma biblioteca de tipos existente e gera um assembly de interoperabilidade e um namespace. Para obter instruções, consulte Como gerar assemblies de interoperabilidade a partir de bibliotecas de tipos.
System.Runtime.InteropServices.TypeLibConverter Classe
Essa classe fornece métodos para converter coclasses e interfaces em uma biblioteca de tipos em metadados dentro de um assembly. Ele produz a mesma saída de metadados que Tlbimp.exe. No entanto, ao contrário Tlbimp.exe, a TypeLibConverter classe pode converter uma biblioteca de tipos na memória em metadados.
Invólucros personalizados
Quando uma biblioteca de tipos está indisponível ou incorreta, uma opção é criar uma definição duplicada da classe ou interface no código-fonte gerenciado. Em seguida, você compila o código-fonte com um compilador que direciona o tempo de execução para produzir metadados em um assembly.
Para definir tipos de COM manualmente, você deve ter acesso aos seguintes itens:
Descrições precisas das coclasses e interfaces que estão sendo definidas.
Um compilador, como o compilador C#, que pode gerar as definições de classe apropriadas do .NET Framework.
Conhecimento das regras de conversão de biblioteca de tipos para montagem.
Escrever um invólucro personalizado é uma técnica avançada. Para obter informações adicionais sobre como gerar um wrapper personalizado, consulte Personalizando wrappers padrão.
Para obter mais informações sobre o processo de importação de interoperabilidade COM, consulte Biblioteca de tipos para resumo de conversão de assembly.
Consulte também
- TypeLibConverter
- Expondo componentes COM ao .NET Framework
- Resumo de conversão de biblioteca de tipos para montagem
- Tlbimp.exe (Importador de Biblioteca de Tipos)
- Personalizando invólucros padrão
- Usando tipos COM em código gerenciado
- Compilando um projeto de interoperabilidade
- Implantando um aplicativo de interoperabilidade
- Como: Adicionar referências a bibliotecas de tipos
- Como: Gerar assemblies de interoperabilidade a partir de bibliotecas de tipos