CodeBlanks Logo Icon CodeBlanks

Özet - dart:ffi

DynamicLibrary ve lookupFunction'ı birleştirerek C çağrısı yaparsın.

Özet - dart:ffi

Bir C fonksiyonu çağırmak için iki adım birleşir: DynamicLibrary.open ile kütüphane yükle, lookupFunction ile fonksiyonu Dart'a bağla. İki typedef (Native ve Dart) ile imzalarını tanımla.

final lib = DynamicLibrary.open('libmath.so');
final topla = lib.lookupFunction<NativeTopla, DartTopla>('topla');
print(topla(2, 3));

Uygulama abs fonksiyonunu çağır

Önce NativeAbs = Int32 Function(Int32) ve DartAbs = int Function(int) typedef'lerini tanımla. main'de DynamicLibrary.process() ile lib al, lookupFunction ile 'abs' sembolünü ara ve abs(-5) sonucunu yazdır.

Başlangıç kodu

main.dart
import 'dart:ffi';

// NativeAbs ve DartAbs typedef'lerini tanımla (Int32/int Function(Int32/int))

void main() {
  // Süreç kütüphanesini al
  // lookupFunction ile abs sembolünü ara
  // negatif bir sayıyı mutlak değere çevirip yazdır
}

Örnek çözüm

main.dart
import 'dart:ffi';

typedef NativeAbs = Int32 Function(Int32);
typedef DartAbs = int Function(int);

void main() {
  final lib = DynamicLibrary.process();
  final abs = lib.lookupFunction<NativeAbs, DartAbs>('abs');
  print(abs(-5));
}

Beklenen çıktı

5

Soru ve cevaplar

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

1 Bir C fonksiyonunu çağırmak için hangi iki ffi aracı birleşir?

  • setState ve build
  • DynamicLibrary ve lookupFunction Doğru cevap
  • Widget ve BuildContext
  • Navigator ve Route

Açıklama: DynamicLibrary C kütüphanesini yükler, lookupFunction sembolü Dart fonksiyonuna çevirir; ikisi birleşince C fonksiyonu çağrılır.

2 topla fonksiyonunu çağır

Soru
print(____(2, 3));
Cevap
print(topla(2, 3));

Açıklama: lookupFunction'ın döndürdüğü Dart fonksiyonu değişken adıyla çağrılır; lib kütüphane, call ve run ise geçerli çağrı sözdizimi değildir.

3 dart:ffi özet eşleşmeleri

Kavram Anlamı
dart:ffi FFI çerçevesi
DynamicLibrary Kütüphane nesnesi
lookupFunction Sembol bağlama
typedef İmza tanımı

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