0Pricing
C# Academy · Ders

Bir bakışta birlikte çalışabilirliğin temelleri (P/Invoke)

P/Invoke ile yerel işlevleri çağırın: DllImport temelleri, dizelerin sıralanması, SetLastError ve basit Win32 örnekleri (Sleep, GetTickCount64).

Bir bakışta birlikte çalışabilirliğin temelleri (P/Invoke), CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 3 dersten oluşur.

Kavram ve amaçlar

P/Invoke, C# kodunun yerel DLL'lerdeki işlevleri çağırmasını sağlar.

  • Bir yönteme bağlanmak için DllImport kullanın
  • Gerektiğinde CharSet ve SetLastError seçeneklerini belirleyin
  • İmzaları basit ve doğru tutun

P/Invoke: Sleep

Yerel işlevi, DllImport ile yönetilen bir yöntem bildirerek bağlayın.

using System;
using System.Runtime.InteropServices;

// Simple P/Invoke call to native Sleep (Windows kernel32)
// Note: This demo may only run on Windows, but it compiles everywhere.
public class Program
{
  [DllImport("kernel32.dll")]
  private static extern void Sleep(uint dwMilliseconds);

  public static void Main(string[] args)
  {
    Console.WriteLine("Sleeping for 200 ms...");
    // Call native function
    Sleep(200);
    Console.WriteLine("Awake!");
  }
}

Yerel dönüş değerleri

Yerel imzayla eşleştirin: burada işaretsiz 64 bit bir değer döndürüyoruz.

using System;
using System.Runtime.InteropServices;

// Get system uptime (ms) from native function.
public class Program
{
  [DllImport("kernel32.dll")]
  private static extern ulong GetTickCount64();

  public static void Main(string[] args)
  {
    ulong ms = GetTickCount64();
    Console.WriteLine("Uptime (ms): " + ms);
  }
}

Dizeler ve CharSet

Geniş dize API'leri ("W" sürümleri) için CharSet.Unicode kullanın. Desteklenmeyen platformlardaki çalışma zamanı hatalarını yakalayın.

using System;
using System.Runtime.InteropServices;

// Demo: marshaling strings to Unicode with CharSet.Unicode.
// On non-Windows environments this may fail at runtime.
public class Program
{
  [DllImport("user32.dll", CharSet = CharSet.Unicode)]
  private static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type);

  public static void Main(string[] args)
  {
    Console.WriteLine("Calling MessageBox (may require Windows GUI)...");
    // 0x00000040 = MB_ICONINFORMATION
    try
    {
      int result = MessageBox(IntPtr.Zero, "Hello from P/Invoke", "Interop", 0x00000040);
      Console.WriteLine("MessageBox returned: " + result);
    }
    catch (Exception ex)
    {
      Console.WriteLine("MessageBox failed at runtime: " + ex.GetType().Name);
    }
  }
}

SetLastError ve türler

Hata işleme:

  • GetLastError ayarlayan API'ler için DllImport içine SetLastError=true ekleyin
  • Başarısız bir çağrıdan sonra Marshal.GetLastWin32Error() değerini okuyun
  • Kesin türleri tercih edin: uint ile int, işaretçiler için IntPtr

Birlikte çalışabilirlik için iyi uygulamalar

  • Basit API'lerle başlayın (karmaşık yapı türleri kullanmayın)
  • Tanıtıcılar için IntPtr kullanın; doğru yerel işlevle serbest bırakın
  • Başsız ortamlarda GUI çağrılarından kaçının
  • Platform sınırlamalarını belgelendirin (yalnızca Windows vb.)

DllImport amacı

Hızlı kontrol: P/Invoke içinde DllImport özniteliği ne yapar?

Özet

Özet: Yerel çağrıları DllImport ile bildirin, türleri dikkatle eşleştirin, dizeler için CharSet seçin ve uygun olduğunda hataları SetLastError ile GetLastError üzerinden işleyin.

Sıkça Sorulan Sorular

“Bir bakışta birlikte çalışabilirliğin temelleri (P/Invoke)” dersi ücretsiz mi?

Evet — “Bir bakışta birlikte çalışabilirliğin temelleri (P/Invoke)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 3 dersten oluşur.

“Bir bakışta birlikte çalışabilirliğin temelleri (P/Invoke)” dersinde ne öğreneceğim?

P/Invoke ile yerel işlevleri çağırın: DllImport temelleri, dizelerin sıralanması, SetLastError ve basit Win32 örnekleri (Sleep, GetTickCount64). C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 2. dersidir.

“Bir bakışta birlikte çalışabilirliğin temelleri (P/Invoke)” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. C# betik oluşturma (dotnet script), parçacıklar ve REPL
  2. Bir bakışta birlikte çalışabilirliğin temelleri (P/Invoke)
  3. CLI kullanım kolaylığı
← C# Academy Sayfasına Dön