CodeBlanks Logo Icon CodeBlanks

DllImport

C# kursu · Uzman · Ders 13/47

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

  1. 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.

  2. 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);
  3. 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.

Uzman bölümündeki tüm dersler