İngilizce dilinde oku

Aracılığıyla paylaş


Yerel birlikte çalışabilirlik ABI desteği

Uygulama İkili Arabirimi (ABI), çalışma zamanlarının ve işletim sistemlerinin alt düzey ikili ayrıntıları ifade etmek için kullandığı arabirimdir. Bu ayrıntılar çağırma kurallarını (yani parametrelerin nasıl geçirildiğini ve sonuçların döndürüldüğünü), özel durum işlemeyi ve sembol mangling'i içerebilir. Aşağıdaki liste, birlikte çalışabilirlik konusunda rehberlik ararken kullanabileceğiniz dillerin, çalışma zamanlarının ve hatta genel teknolojilerin adlarını içerir.

C

C dili, .NET'in desteklendiği tüm platformlarda kararlı bir ABI'yi temsil eder. Genel olarak C, .NET birlikte çalışma API'leri için varsayılan hedeftir ve çoğu birlikte çalışma senaryosu için önerilen hedef dildir.

.NET 7+'da, LibraryImportAttribute C işlevlerini çağırmak için kaynak tarafından oluşturulan destek sağlar. .NET 6 veya önceki sürümleri hedeflediyseniz kullanın DllImportAttribute. Daha fazla bilgi için Birlikte çalışma en iyi yöntemleri kısmına bakın.

Ek bağlantılar:

C++

C++ dilinde tüm .NET desteklenen platformlarda ve en popüler C++ derleyici uygulamalarında (MSVC, clang ve GCC) tanımlı ABI yoktur. Bu tutarlı ABI eksikliği, doğrudan hedeflemeyi zorlaştırır.

C++ ile birlikte çalışmanın önerilen yolu, ile extern "C" işaretlenmiş işlevleri dışarı aktarmak ve bunları C işlevleri olarak çağırmaktır.

Ek bağlantılar:

COM ve IUnknown

COM ve IUnknown ABI, C diliyle uyumlu olacak şekilde tanımlanmıştır. Özellikle C++ gibi nesne odaklı programlamayı desteklemek için tasarlanmıştır, ancak kararlı bir ABI sağlamak için tasarlanmıştır. .NET, COM ve IUnknownile derin bir geçmişe sahiptir ve bu ABI başlangıçta C ile uyumlu olacak şekilde tasarlandığından, tüm .NET platformlarında desteklenir.

.NET 5+'ta, platformlar arası alt düzey IUnknown yaşam süresi desteği ComWrappers tarafından sağlanır. .NET 8+ GeneratedComInterfaceAttribute ve GeneratedComClassAttribute, kaynak tarafından oluşturulan C# projeksiyonlarını sağlar. .NET 5 öncesi sürümleri hedef alıyorsanız, yerleşik COM birlikte çalışma sistemini kullanmanız gerekir ve bu destek Windows ile sınırlıdır.

WinRT platformu, COM ve IUnknown ABI'nin evrimini temsil eder. CsWinRT araç seti bunun için destek sağlar ve ComWrappers üzerine kurulmuştur.

Ek bağlantılar:

Java Sanal Makinesi (JVM) tabanlı diller

Java Sanal Makinesi (JVM), C'de diğer platformlarla birlikte çalışması için bir yabancı işlev arabirimi (FFI) tanımlar. .NET ve Java arasında birlikte çalışabilirlik bu arabirim aracılığıyla gerçekleştirilebilir.

Ek bağlantılar:

Swift

Swift programlama ortamı ,NET'te desteklenen iyi tanımlanmış kararlı bir ABI'ye sahiptir. .NET 9+'da Swift ile birlikte çalışma destekleyen belirli API'ler ad alanı altında System.Runtime.InteropServices.Swift bulunabilir.

Objective-C

Objective-C dili, C dilinin ABI'sini izler ve .NET'te desteklenir. .NET 8+'da Objective-C ile birlikte çalışma destekleyen belirli API'ler ad alanı altında System.Runtime.InteropServices.ObjectiveC bulunabilir.

Ek bağlantılar:

Python

CPython adlı Python çalışma zamanının başvuru uygulaması, C'de diğer platformlarla birlikte çalışmak için bir yabancı işlev arabirimi (FFI) tanımlar. .NET ile Python arasında birlikte çalışabilirlik bu arabirim aracılığıyla gerçekleştirilebilir.

Ek bağlantılar:

golang

Go programlama dili, işlem içi birlikte çalışabilirlik için desteklenmez. Go çalışma zamanı, başka bir çalışma zamanıyla bir işlemde barındırılmak için gereksinimler uygular. Özellikle, sinyal işleyicilerini çalıştıran iş parçacıklarında SA_ONSTACK bayrağının kullanılması gereksinimdir. Bu gereksinimler şu anda .NET tarafından karşılanmamaktadır.

Golang ile birlikte çalışmanın önerilen yolu, golang tarafından barındırılan bir işlem kullanmak ve işlemler arası iletişim mekanizması aracılığıyla iletişim kurmaktır.

ARM64EC

ARM64EC ABI desteklenmez.