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 Interface Binária de Aplicativo (ABI) é a interface que os tempos de execução e os sistemas operacionais usam para expressar detalhes binários de baixo nível. Esses detalhes podem incluir convenções de chamada (ou seja, como os parâmetros são passados e os resultados retornados), manipulação de exceções e manipulação de símbolos. A lista a seguir contém os nomes de linguagens, tempos de execução e até mesmo tecnologias gerais que você pode usar ao procurar orientação sobre interoperabilidade.
C
A linguagem C representa uma ABI estável em todas as plataformas onde o .NET é suportado. Em geral, C é o destino assumido para APIs de interoperabilidade do .NET e é a linguagem de destino recomendada para a maioria dos cenários de interoperabilidade.
No .NET 7+, LibraryImportAttribute fornece suporte gerado pela fonte para chamar funções C. Se estiveres a direcionar o .NET 6 ou anterior, usa DllImportAttribute. Para obter mais informações, consulte Práticas recomendadas de interoperabilidade.
Ligações adicionais:
-
LibraryImportAttributePasso a passo - CsWin32 é um gerador de origem para acessar a superfície da API do Windows Win32
C++
A linguagem C++ não tem ABI definida em todas as plataformas suportadas pelo .NET e nas implementações de compilador C++ mais populares (ou seja, MSVC, clang e GCC). Esta falta de uma ABI consistente dificulta o direcionamento direto.
A maneira recomendada de interoperar com C++ é exportar funções marcadas com extern "C" e chamá-las como funções C.
Ligações adicionais:
COM e IUnknown
O COM e IUnknown o ABI foram definidos para se alinharem com a linguagem C. Ele foi projetado especificamente para suportar programação orientada a objetos, semelhante ao C++, mas para fornecer uma ABI estável. O .NET tem um histórico profundo com COM e IUnknown, e como essa ABI foi originalmente projetada para se alinhar com C, ela é suportada em todas as plataformas .NET.
No .NET 5 e superior, o suporte de ciclo de vida de baixo nível e entre plataformas IUnknown é fornecido pela ComWrappers. No .NET 8+, GeneratedComInterfaceAttribute e GeneratedComClassAttribute fornecem projeções C# geradas pelo código-fonte. Se estiver a utilizar versões anteriores ao .NET 5, deve usar o sistema de interoperabilidade COM incorporado, e este suporte está limitado ao Windows.
A plataforma WinRT representa uma evolução da COM e da ABI. O suporte para isso é fornecido pelo kit de ferramentas CsWinRT e é baseado no ComWrappers.
Ligações adicionais:
Linguagens baseadas em Java Virtual Machine (JVM)
A Java Virtual Machine (JVM) define uma interface de função estrangeira (FFI) em C para interoperar com outras plataformas. A interoperabilidade entre .NET e Java pode ser alcançada através desta interface.
Ligações adicionais:
Rápido
O ambiente de programação Swift tem uma ABI estável bem definida que é suportada no .NET. No .NET 9+, APIs específicas que suportam interoperabilidade com Swift podem ser encontradas sob o System.Runtime.InteropServices.Swift namespace.
Objective-C
A linguagem Objective-C segue a ABI da linguagem C e é suportada no .NET. No .NET 8+, APIs específicas que suportam interoperabilidade com Objective-C podem ser encontradas no System.Runtime.InteropServices.ObjectiveC namespace.
Ligações adicionais:
Python
A implementação de referência do tempo de execução do Python, CPython, define uma interface de função estrangeira (FFI) em C para interoperar com outras plataformas. A interoperabilidade entre .NET e Python pode ser alcançada através desta interface.
Ligações adicionais:
- Fornecendo uma API C para um módulo de extensão
- Python para .NET
- CSnakes - consumindo Python do .NET.
Golang
A linguagem de programação Go não é suportada para interoperabilidade em processo. O ambiente de execução Go impõe requisitos para ser hospedado num processo com outro ambiente de execução. Especificamente, esse requisito é o uso do sinalizador SA_ONSTACK em threads que executam manipuladores de sinais. Esses requisitos não são atendidos atualmente pelo .NET.
A maneira recomendada de interoperar com golang é usar um processo hospedado em golang e se comunicar através de um mecanismo de comunicação entre processos.
ARM64EC
O ARM64EC ABI não é suportado.