Natív együttműködési ABI-támogatás

Az Application Binary Interface (ABI) az a felület, amelyet a futtatókörnyezetek és az operációs rendszerek az alacsony szintű bináris adatok kifejezésére használnak. Ezek a részletek tartalmazhatnak meghívási konvenciókat (azaz a paraméterek átadásának és az eredmények visszaadását), a kivételkezelést és a szimbólumok torzítását. Az alábbi lista tartalmazza azoknak a nyelveknek, futtatókörnyezeteknek és általános technológiáknak a nevét, amelyeket az együttműködésre vonatkozó útmutatás keresésekor használhat.

C

A C nyelv stabil ABI-t jelent minden olyan platformon, ahol a .NET támogatott. Általában a C nyelvet tekintik a .NET interop API-k célnyelvének, és ajánlott célnyelvnek a legtöbb interop forgatókönyv esetében.

A .NET 7+- LibraryImportAttribute ban forrás által generált támogatást biztosít a C-függvények meghívásához. Ha a .NET 6-ra vagy korábbi verzióra céloz, használja a DllImportAttribute verziót. További információkért tekintse meg az Interop ajánlott eljárásait.

További hivatkozások:

C++

A C++ nyelv nem rendelkezik definiált ABI-val az összes .NET által támogatott platformon és a legnépszerűbb C++ fordító implementációkban (azaz MSVC, clang és GCC). A konzisztens ABI hiánya megnehezíti a közvetlen célzást.

A C++ funkcióval való együttműködés ajánlott módja a C függvényekkel extern "C" jelölt függvények exportálása és C-függvényként való meghívása.

További hivatkozások:

COM és IUnknown

A COM és IUnknown az ABI a C nyelvhez igazodva lett definiálva. Kifejezetten a C++-hoz hasonló objektumorientált programozás támogatására tervezték, de stabil ABI-t biztosít. A .NET-nek mély előzményei vannak a COM-val, és IUnknownmivel ezt az ABI-t eredetileg a C-vel való összhangban tervezték, minden .NET-platformon támogatott.

A .NET 5+-ban az alacsony szintű, platformfüggetlen IUnknown élettartam-támogatást a ComWrappers biztosítja. A .NET 8+-ban adja meg a GeneratedComInterfaceAttributeGeneratedComClassAttribute forrás által generált C#-előrejelzéseket. Ha a .NET 5 előtti verziókat célozza meg, a beépített COM interop rendszert kell használnia, és ez a támogatás a Windowsra korlátozódik.

A WinRT platform a COM és az ABI evolúcióját képviseli. Ehhez támogatást a CsWinRT eszközkészlet nyújt, és a rendszer a következőre ComWrappersépül: .

További hivatkozások:

Java virtuális gép (JVM) alapú nyelvek

A Java virtuális gép (JVM) egy idegen függvényfelületet (FFI) határoz meg a C-ben, hogy együttműködjön más platformokkal. A .NET és a Java közötti interoperabilitás ezen a felületen érhető el.

További hivatkozások:

Gyors

A Swift programozási környezet egy jól definiált stabil ABI-val rendelkezik, amelyet a .NET támogat. A .NET 9+-ban a Névtérben System.Runtime.InteropServices.Swift találhatók a Swifttel való együttműködést támogató specifikus API-k.

Objective-C

Az Objective-C nyelv a C nyelv ABI-ját követi, és a .NET-ben is támogatott. A .NET 8+-ban az Objective-C-vel való együttműködést támogató specifikus API-k a System.Runtime.InteropServices.ObjectiveC névtérben találhatók.

További hivatkozások:

Python

A Python futásidejének referencia-implementációja, a CPython egy idegen függvényfelületet (FFI) határoz meg a C-ben, hogy együttműködjön más platformokkal. A .NET és a Python közötti interoperabilitás ezen a felületen érhető el.

További hivatkozások:

Go programozási nyelv

A Go programozási nyelv nem támogatott a folyamatban lévő együttműködéshez. A Go-futtatókörnyezet követelményeket támaszt arra vonatkozóan, hogy egy másik futtatókörnyezettel rendelkező folyamatban legyenek üzemeltetve. Konkrétan, ez a követelmény az, hogy a SA_ONSTACK jelzés használata szükséges a jelkezelőket futtató szálakon. Ezeket a követelményeket a .NET jelenleg nem teljesíti.

A golanggal való együttműködés ajánlott módja egy golang által üzemeltetett folyamat használata és a folyamatközi kommunikációs mechanizmuson keresztüli kommunikáció.

ARM64EC

A ARM64EC ABI nem támogatott.