Platform Invocation Services – P/Invoke

P/invoke yani Platform Invocation Services, managed kod içerisinde unmanaged kod fonksiyonlarının kulanılmasını sağlayan bir .NET özelliğidir. Bu konunun daha iyi anlaşılması için öncelikle managed ve unmanaged kod kavramlarını bilmek gereklidir.

Managed ve Unmanaged Kod

Managed koda kabaca ‘.NET dilleri(C#, Visual Basic) ile yazılan kodlardır’ denilebilir. Managed kod önce ortak bir dile çevrilir(CIL) ve ardindan bu  kod CLR ile çalıştırılır. Bu tarz yazılmış kodlarda bellek yönetimi(Garbage Collector)  gibi özel işlemleri framework kendisi yapar. Bu ayrıntılar kod yazılırken programcı tarafından düşünülmez. Unmanaged kod da ise durum managed kodun tersidir, kod CLR ile çalıştırılmaz. Proje için .NET dillerinin yetersiz kaldığı veya performans kaygısından dolayı tercih edilmediği durumlarda, proje C/C++ gibi dillerle geliştirilirse bu kod ortak dile çevrilmeden çalıştırılır ve kod CLR kontrolünde çalıştırılmaz. .NET, managed ve unmanaged kodların beraber kullanılmasına p/invoke özelliği sayesinde izin verir. Managed kod ve unmanaged kod birbirinin eksik yönlerini tamamlamış olur.

CIL – Common Intermediate Language

CLR – Common Language Runtime

CIL-CRL

 

Örnek P/Invoke Kullanımı

www.pinvoke.net isimli site .NET altında kullanılabilecek kütüphaneler, örnek kullanımlar ve bu kütüphaneleri kullanırken yaşanabilecek zorlukları içeren faydalı bir kaynaktır. Şimdi bu kaynağı kullanarak basit bir örnek yapalım.

  • Öncelikle Visual Studio programımızı başlatıyoruz ve yeni bir C# projesi oluşturuyoruz.01

 

  • Ardından projeye yeni bir buton ekliyoruz
  • 02

 

  • Butonun üzerine çift tıklayarak butonun ‘event’ine gidiyoruz. Aşağıdaki resimdeki gibi projemize kernel32.dll de bulunan Beep fonksiyonunu ekliyoruz. Bu fonksiyonu test etmek için bir döngü kurup bu fonksiyonu çağırıyoruz.
  • 04

 

  • Yazılmış olan bu program çalıştırılıp, butona tıklandığı zaman bilgisayarımız 10 defa ses çıkaracaktır.

Kodlar:

 

Kaynaklar:
Bu yazı hakkında ne düşünüyorsun ?
  • Faydalı 
  • Müthiş 
  • Gereksiz 
  • Normal