CodeBlanks Logo Icon CodeBlanks

DynamicLibrary

DynamicLibrary ile native yükleme öğrenirsin.

DynamicLibrary

DynamicLibrary, dart:ffi ile C kütüphanelerini Dart tarafında temsil eden sınıftır. Bir kütüphane DynamicLibrary.open('libmylib.so') ile dosyadan, DynamicLibrary.process() ile süreçten, DynamicLibrary.executable() ile çalıştırılabilir dosyadan yüklenir.

Açılan kütüphane bir handle'dır; üzerinden lookupFunction ile semboller (fonksiyonlar) aranır. Kütüphane yüklenemezse ArgumentError fırlatılır. Platforma göre dosya uzantısı değişir: Linux .so, macOS .dylib, Windows .dll.

Sembol arama

Bir DynamicLibrary yüklendiğinde, içindeki fonksiyonlar lookupFunction ile aranır. Her fonksiyon bir sembol adıyla temsil edilir; örneğin add C tarafında int add(int, int) olabilir.

Sembol bulunamazsa ArgumentError fırlatılır. FFI, native ve Dart türleri arasında eşleme yapar: Int32 ↔ int, Double ↔ double, Pointer<Void> ↔ Pointer<NativeType>. Eşleme statik olarak bildirilir.

Uygulama LibraryLoader sınıfı

Bir LibraryLoader sınıfı tanımla: final String path; final String platform; LibraryLoader(this.path, this.platform); alan ve kurucu. String describe() => 'loading $path on $platform'; metodu. main içinde final l = LibraryLoader('libmylib.so', 'Linux'); yarat; print(l.describe()); ile yazdır.

Başlangıç kodu

main.dart
void main() {
  // LibraryLoader sınıfını tanımla (path, platform; describe)
  // bir LibraryLoader yarat; describe() yazdır
}

Örnek çözüm

main.dart
class LibraryLoader {
  final String path;
  final String platform;
  LibraryLoader(this.path, this.platform);
  String describe() => 'loading $path on $platform';
}

void main() {
  final l = LibraryLoader('libmylib.so', 'Linux');
  print(l.describe());
}

Beklenen çıktı

loading libmylib.so on Linux

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Library loading

Soru
final lib = DynamicLibrary.____('libmylib.so');
Cevap
final lib = DynamicLibrary.open('libmylib.so');

Açıklama: DynamicLibrary.open dosyadan C kütüphanesi yükler.

2 Linux'ta C kütüphanesi dosya uzantısı nedir?

  • .dll
  • .dylib
  • .so Doğru cevap
  • .exe

Açıklama: Linux'ta C kütüphaneleri .so uzantılıdır.

3 DynamicLibrary metodlarını eşleştir

Kavram Anlamı
DynamicLibrary.open Dosyadan yükle
DynamicLibrary.process Süreçten yükle
DynamicLibrary.executable Çalıştırılabilir dosyadan
lookupFunction Sembol arama

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