Compatibilidad con ABI de interoperabilidad nativa
Artículo
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.
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.
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.
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.
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 .
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.
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.
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
Azure HPC es una capacidad en la nube creada a propósito para la carga de trabajo de IA y de HPC, mediante procesadores de vanguardia e interconexión InfiniBand de clase HPC, con el fin de ofrecer el mejor rendimiento, escalabilidad y valor de la aplicación. Azure HPC permite a los usuarios desbloquear la innovación, la productividad y la agilidad empresarial, mediante una gama de tecnologías de inteligencia artificial y de HPC de alta disponibilidad que se pueden asignar dinámicamente a medida que cambian