Özet - dart:ffi
- Flutter kursu
- Uzman seviye
- Ders 25/39
- 4 dk
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
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
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
print(____(2, 3));
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ı |