Compartilhar via


Visão geral da interoperabilidade

A interoperabilidade permite que você preserve e aproveite os investimentos existentes em código não gerenciado. O código executado sob o controle do CLR (Common Language Runtime) é o código gerenciado e o código executado fora do CLR não é gerenciado. Componentes COM, COM+, C++, componentes ActiveX e API do Microsoft Windows são exemplos de código não gerenciado.

O .NET permite a interoperabilidade com código não gerenciado por meio de serviços de invocação de plataforma, namespace System.Runtime.InteropServices , interoperabilidade C++ e interoperabilidade COM (interoperabilidade COM).

Invocação de plataforma

A invocação de plataforma é um serviço que permite que o código gerenciado chame funções não gerenciadas implementadas em DLLs (bibliotecas de link dinâmico), como a API do Microsoft Windows. Ele localiza e invoca uma função exportada e gerencia seus argumentos (inteiros, cadeias de caracteres, matrizes, estruturas e assim por diante) através da fronteira de interoperação conforme necessário.

Para obter mais informações, consulte Consumindo Funções de DLL Não Gerenciadas e Como usar o invocador de plataforma para reproduzir um arquivo WAV.

Observação

O CLR ( Common Language Runtime ) gerencia o acesso aos recursos do sistema. Chamar código não gerenciado que está fora do CLR ignora esse mecanismo de segurança e, portanto, apresenta um risco à segurança. Por exemplo, código não gerenciado pode chamar recursos em código não gerenciado diretamente, ignorando mecanismos de segurança CLR. Para obter mais informações, consulte Segurança no .NET.

Interoperabilidade C++

Você pode usar a interoperabilidade C++, também conhecida como IJW (It Just Works), para encapsular uma classe C++ nativa. A interoperabilidade do C++ permite que o código criado em C# ou em outro idioma do .NET acesse-o. Você escreve código C++ para encapsular um componente DLL ou COM nativo. Ao contrário de outras linguagens .NET, o Visual C++ tem suporte de interoperabilidade que permite código gerenciado e não gerenciado no mesmo aplicativo e até mesmo no mesmo arquivo. Em seguida, você cria o código C++ usando a opção do compilador /clr para produzir um assembly gerenciado. Por fim, você adiciona uma referência ao assembly em seu projeto em C# e usa os objetos encapsulados da mesma forma que usaria outras classes gerenciadas.

Expondo componentes COM a C#

Você pode consumir um componente COM de um projeto em C#. As etapas gerais são as seguintes:

  1. Localize um componente COM para usá-lo e registrá-lo. Use regsvr32.exe para registrar ou cancelar o registro de uma DLL COM.
  2. Adicione ao projeto uma referência ao componente COM ou à biblioteca de tipos. Quando você adiciona a referência, o Visual Studio usa o Tlbimp.exe (Importador da Biblioteca de Tipos), que usa uma biblioteca de tipos como entrada, para gerar um assembly de interoperabilidade do .NET. O assembly, também chamado de RCW (Runtime Callable Wrapper), contém classes gerenciadas e interfaces que encapsulam as classes COM e as interfaces que estão na biblioteca de tipos. O Visual Studio adiciona ao projeto uma referência ao assembly gerado.
  3. Crie uma instância de uma classe definida no RCW. A criação de uma instância dessa classe cria uma instância do objeto COM.
  4. Use o objeto assim como você usa outros objetos gerenciados. Quando o objeto é recuperado pela coleta de lixo, a instância do objeto COM também é liberada da memória.

Para obter mais informações, consulte Expondo componentes COM ao .NET Framework.

Expondo C# ao COM

Os clientes COM podem consumir tipos do C# que foram expostos corretamente. As etapas básicas para expor tipos C# são as seguintes:

  1. Adicione atributos de interoperabilidade no projeto C#. Você pode tornar um assembly COM visível modificando as propriedades do projeto em C#. Para obter mais informações, consulte Caixa de diálogo de informações do assembly.
  2. Gere uma biblioteca de tipos COM e registre-a para uso em COM. Você pode modificar as propriedades do projeto C# para registrar automaticamente o assembly do C# para a interoperabilidade COM. O Visual Studio usa a Regasm.exe (ferramenta Assembly Registration), com a opção de linha de comando /tlb, que usa um assembly gerenciado como entrada para gerar uma biblioteca de tipos. Essa biblioteca de tipos descreve os public tipos no assembly e adiciona entradas de registro para que os clientes COM possam criar classes gerenciadas.

Para obter mais informações, consulte Expondo componentes do .NET Framework ao COM e Classe COM de exemplo.

Consulte também