Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A Interface Binária do Aplicativo (ABI) é a interface que ambientes de execução e 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), tratamento de exceções e mutilaçã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 diretrizes sobre interoperabilidade.
C
A linguagem C representa uma ABI estável em todas as plataformas em que há suporte para o .NET. 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 origem para chamar funções C. Se você estiver desenvolvendo para o .NET 6 ou anterior, use DllImportAttribute. Para obter mais informações, consulte Práticas recomendadas de interoperabilidade.
Links adicionais:
-
LibraryImportAttributePasso a passo - O 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 com suporte do .NET e nas implementações de compilador C++ mais populares (ou seja, MSVC, clang e GCC). Essa 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 de funções C.
Links adicionais:
COM e IUnknown
O COM e IUnknown o ABI foram definidos para se alinhar 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 tem suporte em todas as plataformas .NET.
No .NET 5+, o suporte multiplataforma de baixo nível para a vida útil é fornecido pelo ComWrappers. No caso do .NET 8+, GeneratedComInterfaceAttribute e GeneratedComClassAttribute fornecem projeções de C# geradas a partir do código-fonte. Se você estiver direcionando versões anteriores ao .NET 5, deverá usar o sistema de interoperabilidade COM embutido, e esse suporte é limitado ao Windows.
A plataforma WinRT representa uma evolução do COM e do IUnknown ABI. O suporte para isso é fornecido pelo kit de ferramentas CsWinRT e é baseado no ComWrappers.
Links adicionais:
Linguagens baseadas em Java Virtual Machine (JVM)
A Java Virtual Machine (JVM) define uma interface de função externa (FFI) em C para interoperar com outras plataformas. A interoperabilidade entre o .NET e o Java pode ser obtida por meio dessa interface.
Links adicionais:
Swift
O ambiente de programação Swift tem uma ABI estável bem definida que é suportada em .NET. No .NET 9+, APIs específicas que dão suporte à interoperabilidade com o Swift podem ser encontradas no System.Runtime.InteropServices.Swift namespace.
Objective-C
A linguagem Objective-C segue a ABI da linguagem C e tem suporte em .NET. No .NET 8+, APIs específicas que dão suporte à interoperabilidade com Objective-C podem ser encontradas no System.Runtime.InteropServices.ObjectiveC namespace.
Links adicionais:
Python
A implementação de referência do tempo de execução do Python, CPython, define uma interface de função externa (FFI) em C para interoperar com outras plataformas. A interoperabilidade entre o .NET e o Python pode ser obtida por meio dessa interface.
Links adicionais:
- Fornecendo uma API C para um módulo de extensão
- Python para .NET
- CSnakes – consumindo Python a partir do .NET.
golang
A linguagem de programação Go não é suportada para interoperabilidade em processo. O runtime Go impõe requisitos para ser hospedado em um processo junto com outro runtime. Especificamente, esse requisito é o uso do sinalizador SA_ONSTACK em threads que executam manipuladores de sinal. No momento, esses requisitos não são atendidos pelo .NET.
A maneira recomendada de interoperar com golang é usar um processo hospedado em golang e se comunicar por meio de um mecanismo de comunicação entre processos.
ARM64EC
Não há suporte para a ABI ARM64EC .