0Pricing
Lua Academy · Lektion

FFI-Grundlagen: ffi.cdef und ffi.load

Deklarieren Sie C-Typen und laden Sie gemeinsam genutzte Bibliotheken mit dem ffi-Modul von LuaJIT

FFI-Grundlagen: ffi.cdef und ffi.load ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist die FFI?

Die FFI (Foreign Function Interface) von LuaJIT ermöglicht es Ihnen, C-Bibliotheksfunktionen aufzurufen und C-Datenstrukturen direkt aus Lua zu verwenden, ohne C-Wrapper-Code schreiben zu müssen.

FFI anfordern

Laden Sie die FFI-Bibliothek mit require("ffi"). Sie ist in LuaJIT integriert und in der standardmäßigen PUC Lua nicht verfügbar.

local ffi = require("ffi")

ffi.cdef: C-Typen deklarieren

ffi.cdef(cDeclarations) analysiert C-Deklarationen und stellt die Typen und Funktionssignaturen der FFI zur Verfügung. Es wird kein tatsächlicher Code kompiliert – nur Typinformationen.

ffi.cdef[[
  int printf(const char *fmt, ...);
  double sqrt(double x);
  typedef struct { int x; int y; } Point;
]]

ffi.load: Eine Shared Library laden

ffi.load(libname) lädt eine Shared Library und gibt ein Objekt zurück, dessen Felder die deklarierten C-Funktionen enthalten.

local C = ffi.C       -- access to libc on POSIX
local m = ffi.load("m")  -- libm
print(m.sqrt(2.0))       -- 1.414...

Auf libc-Funktionen direkt zugreifen

Auf POSIX-Systemen bietet ffi.C Zugriff auf alle Standardfunktionen der C-Bibliothek, ohne dass ein explizites Laden erforderlich ist.

ffi.cdef[[ int puts(const char *s); ]]
ffi.C.puts("Hello from C!")

ffi.load-Pfad

Übergeben Sie den vollständigen Pfad oder den Namen einer Standardbibliothek. Verwenden Sie unter Linux "m" für libm.so, "pthread" für pthreads usw.

Structs deklarieren

Deklarieren Sie C-Structs in cdef und reservieren Sie anschließend Speicher für sie und greifen Sie aus Lua darauf zu.

ffi.cdef[[
  typedef struct { float x, y, z; } Vec3;
]]
local v = ffi.new("Vec3", {1, 2, 3})
print(v.x, v.y, v.z)  -- 1.0  2.0  3.0

Typannotationen und Qualifizierer

cdef unterstützt const, unsigned, int32_t, uint64_t und weitere standardmäßige C-Typen.

Mehrere cdef-Aufrufe

Sie können ffi.cdef mehrfach aufrufen. Doppelte Deklarationen werden ignoriert. Üblicherweise organisieren Sie sie nach Bibliothek.

Plattformunterschiede

Struct-Layouts und Funktionssignaturen können sich je nach Plattform unterscheiden, etwa zwischen Windows und Linux oder zwischen 32- und 64-Bit-Systemen. Verwenden Sie ffi.os und ffi.arch, um die korrekten Signaturen bedingt zu deklarieren.

Sicherheitshinweis

Die FFI umgeht die Typsicherheit von Lua. Falsche C-Deklarationen führen zu Speicherbeschädigungen, Segmentation Faults oder undefiniertem Verhalten. Überprüfen Sie Deklarationen immer anhand des tatsächlichen C-Headers.

Frage zu den FFI-Grundlagen

Was bewirkt ffi.cdef?

Rückblick: FFI-Grundlagen

Verwenden Sie ffi.cdef, um C-Typen und -Funktionen zu deklarieren, und ffi.load, um Shared Libraries zu laden. ffi.C ermöglicht den direkten Zugriff auf libc. Überprüfen Sie immer, ob die Deklarationen mit den tatsächlichen C-Headern übereinstimmen, um Speicherbeschädigungen zu vermeiden.

Häufig gestellte Fragen

Ist die Lektion „FFI-Grundlagen: ffi.cdef und ffi.load“ kostenlos?

Ja — der vollständige Text von „FFI-Grundlagen: ffi.cdef und ffi.load“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „FFI-Grundlagen: ffi.cdef und ffi.load“?

Deklarieren Sie C-Typen und laden Sie gemeinsam genutzte Bibliotheken mit dem ffi-Modul von LuaJIT Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „FFI-Grundlagen: ffi.cdef und ffi.load“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. FFI-Grundlagen: ffi.cdef und ffi.load
  2. C-Funktionen über FFI aufrufen
  3. Pointer, Structs und Arrays im FFI
  4. Callbacks: Lua-Funktionen an C übergeben
← Zurück zu Lua Academy