Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La interfaz binaria de aplicaciones (ABI) es la interfaz que usan los entornos de ejecución y los sistemas operativos para expresar detalles binarios de bajo nivel. Estos detalles pueden incluir convenciones de llamada (es decir, cómo se pasan los parámetros y se devuelven los resultados), el control de excepciones y la administración de símbolos. La lista siguiente contiene los nombres de lenguajes, entornos de ejecución e incluso tecnologías generales que puede usar al buscar instrucciones sobre la interoperabilidad.
C
El lenguaje C representa una ABI estable en todas las plataformas donde se admite .NET. En general, C es el destino asumido para las API de interoperabilidad de .NET y es el lenguaje de destino recomendado para la mayoría de los escenarios de interoperabilidad.
En .NET 7+, LibraryImportAttribute proporciona compatibilidad generada por el origen para llamar a funciones de C. Si tiene como destino .NET 6 o versiones anteriores, use DllImportAttribute. Para obtener más información, consulte Procedimientos recomendados de interoperabilidad.
Vínculos adicionales:
-
LibraryImportAttribute
Tutorial - CsWin32 es un generador de origen para acceder a la superficie de la API de Windows Win32
C++
El lenguaje C++ no tiene abi definida en todas las plataformas compatibles con .NET y las implementaciones del compilador de C++ más populares (es decir, MSVC, clang y GCC). Esta falta de una ABI coherente dificulta el destino directamente.
La manera recomendada de interoperar con C++ es exportar funciones marcadas con extern "C"
y llamarlas como funciones de C.
Vínculos adicionales:
COM y IUnknown
Com y IUnknown
ABI se definieron para alinearse con el lenguaje C. Se diseñó específicamente para admitir la programación orientada a objetos, similar a C++, pero para proporcionar una ABI estable. .NET tiene un historial profundo con COM y IUnknown
, y como esta ABI se diseñó originalmente para alinearse con C, se admite en todas las plataformas .NET.
En .NET 5 y versiones posteriores, la compatibilidad entre plataformas y IUnknown
de bajo nivel se proporciona mediante ComWrappers. En .NET 8+, GeneratedComInterfaceAttribute y GeneratedComClassAttribute proporcione proyecciones de C# generadas por el origen. Si tiene como destino versiones anteriores a .NET 5, debe usar el sistema de interoperabilidad COM integrado y esta compatibilidad se limita a Windows.
La plataforma WinRT representa una evolución de COM y IUnknown
ABI. El kit de herramientas de CsWinRT proporciona compatibilidad con esto y se basa en ComWrappers.
Vínculos adicionales:
Lenguajes basados en máquinas virtuales Java (JVM)
La máquina virtual Java (JVM) define una interfaz de función externa (FFI) en C para interoperar con otras plataformas. La interoperabilidad entre .NET y Java se puede lograr a través de esta interfaz.
Vínculos adicionales:
Veloz
El entorno de programación swift tiene una ABI estable bien definida que se admite en .NET. En .NET 9 y versiones posteriores, se pueden encontrar API específicas que admiten la interoperabilidad con Swift en el System.Runtime.InteropServices.Swift espacio de nombres .
Objective-C
El lenguaje Objective-C sigue la ABI del lenguaje C y se admite en .NET. En .NET 8+, se pueden encontrar API específicas que admiten la interoperabilidad con Objective-C en el System.Runtime.InteropServices.ObjectiveC espacio de nombres .
Vínculos adicionales:
Pitón
La implementación de referencia del tiempo de ejecución de Python, CPython, define una interfaz de función externa (FFI) en C para interoperar con otras plataformas. La interoperabilidad entre .NET y Python se puede lograr a través de esta interfaz.
Vínculos adicionales:
- Proporcionar una API de C para un módulo de extensión
- Python para .NET
- CSnakes : consumo de Python desde .NET.
golang
El lenguaje de programación Go no se admite para la interoperabilidad en proceso. El entorno de ejecución de Go impone requisitos para hospedarse en un proceso con otro runtime. En concreto, ese requisito es el uso de la SA_ONSTACK
marca en subprocesos que ejecutan controladores de señal. Actualmente, .NET no cumple estos requisitos.
La manera recomendada de interoperar con golang es usar un proceso hospedado en golang y comunicarse a través de un mecanismo de comunicación entre procesos.