DllImport
DllImport ile yerel kütüphane çağırmayı öğrenirsin.
DllImport nedir?
DllImport attribute'ü, yönetilmeyen (native) bir DLL'deki metodu çağırmaya izin verir. Bu mekanizmaya P/Invoke denir. Bildirim şöyledir:
[DllImport("user32.dll")] static extern int MessageBox(IntPtr h, string text, string caption, int type);
Çalışma zamanı parametreleri yönetilen ve yönetilmeyen tür arasında otomatik dönüştürür. Bu, Win32 API ve C kütüphanelerini C#'tan çağırmanın en yaygın yoludur.
extern ve static
DllImport ile işaretlenen metot static extern olmalıdır. extern, gövdenin C# tarafında olmadığını (yerel kütüphanede olduğunu) belirtir; static, sınıf örneği olmadan çağrılacağını gösterir.
Çalışma zamanı metot çağrısını yakalayıp ilgili DLL fonksiyonuna yönlendirir; parametreleri dönüşüm çizelgesine göre marshal eder. Bu sayede C# kodu yerel fonksiyonu sanki normal metotmuş gibi çağırır.
Uygulama DllImport ile abs çağır
[DllImport("libc.so.6")] static extern int abs(int n); bildirimini ekle. Main'de int r = abs(-5); çağır ve Console.WriteLine(r); ile yazdır.
Örnek çözümü göster
[DllImport("libc.so.6")] static extern int abs(int n); bildir. Main'de int r = abs(-5); Console.WriteLine(r);
Örnek çözüm:
using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport("libc.so.6")]
static extern int abs(int n);
static void Main()
{
int r = abs(-5);
Console.WriteLine(r);
}
}
Kendini test et
-
DllImport neyi sağlar?
- Yerel (native) DLL çağrısı
- Yeni DLL üretir
- Thread oluşturur
- Yönetilen metot tanımlar
Cevabı göster
Yerel (native) DLL çağrısı — Doğru. DllImport ile yerel DLL'lerden metot çağrılır.
-
DllImport metodunu tamamla
[DllImport("user32.dll")] static extern int ____(IntPtr h, string t, string c, int type);Cevabı göster
[DllImport("user32.dll")] static extern int MessageBox(IntPtr h, string t, string c, int type); -
DllImport metodu nasıl bildirilir?
- public virtual
- abstract override
- static extern
- internal static virtual
Cevabı göster
static extern — Doğru. DllImport metotları static extern olur.