Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
- Localize um componente COM para usá-lo e registre-o. Use regsvr32.exe para registrar ou cancelar o registro de uma DLL COM.
- 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.
- 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.
- 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:
- 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.
- 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 ospublictipos 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.