Partilhar via


Visão geral da interoperabilidade

A interoperabilidade permite preservar e aproveitar os investimentos existentes em código não gerenciado. O código executado sob o controle do Common Language Runtime (CLR) é código gerenciado e o código executado fora do CLR é código não gerenciado. COM, COM+, componentes 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 da plataforma

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

Para obter mais informações, consulte Consumindo funções DLL não gerenciadas e Como usar a invocação de plataforma para reproduzir um arquivo WAV.

Observação

O Common Language Runtime (CLR) 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 de segurança. Por exemplo, o código não gerenciado pode chamar recursos em código não gerenciado diretamente, ignorando os 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 It Just Works (IJW), para encapsular uma classe C++ nativa. A interoperabilidade C++ permite que o código criado em C# ou outra linguagem .NET o acesse. Você escreve código C++ para encapsular um componente nativo DLL ou COM. Ao contrário de outras linguagens .NET, 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 de compilador /clr para produzir um assembly gerenciado. Finalmente, você adiciona uma referência ao assembly em seu projeto 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 C#. As etapas gerais são as seguintes:

  1. Localize um componente COM para usá-lo e registre-o. 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 (Type Library Importer), que usa uma biblioteca de tipos como entrada, para gerar um assembly de interoperabilidade .NET. O assembly, também chamado de runtime callable wrapper (RCW), contém classes gerenciadas e interfaces que encapsulam as classes COM e 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 da mesma forma que 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# para COM

Os clientes COM podem consumir tipos de dados C# que estejam corretamente expostos. As etapas básicas para expor tipos de 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 C#. Para obter mais informações, consulte Caixa de Diálogo de Informações de Montagem.
  2. Gere uma biblioteca de tipos COM e registre-a para uso COM. Você pode modificar as propriedades do projeto C# para registrar automaticamente o assembly C# para interoperabilidade COM. O Visual Studio usa a ferramenta Regasm.exe (Assembly Registration Tool), com a opção de linha de comandos /tlb, que toma um assembly gerido como entrada, para gerar uma biblioteca de tipos. Essa biblioteca de tipos descreve os public tipos no assembly e adiciona entradas do Registro para que os clientes COM possam criar classes gerenciadas.

Para obter mais informações, consulte Exposing .NET Framework Components to COM and Example COM Class.

Ver também