C-Funktionen über FFI aufrufen
Rufen Sie libc- und eigene Funktionen gemeinsam genutzter Bibliotheken ohne zusätzlichen Overhead aus Lua auf
C-Funktionen über FFI aufrufen ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
Direkte C-Funktionsaufrufe
Nach der Deklaration mit ffi.cdef werden C-Funktionen über das Bibliotheksobjekt genauso wie Lua-Funktionen aufgerufen. Argumente und Rückgabewerte werden automatisch konvertiert.
local ffi = require("ffi")
ffi.cdef[[ double sin(double x); ]]
local m = ffi.load("m")
print(m.sin(math.pi / 2)) -- 1.0Typkonvertierung
Lua-Zahlen werden standardmäßig zu C- doubles. Die FFI konvertiert sie automatisch in den deklarierten C-Parametertyp. Boolesche Werte werden zu 0/1. Strings werden zu const char*.
printf aufrufen
printf ist eine variable C-Funktion. Rufen Sie sie über ffi.C.printf mit Formatzeichenfolgen und Argumenten auf.
ffi.cdef[[ int printf(const char *fmt, ...); ]]
ffi.C.printf("Sum: %d\n", 42)Rückgabewerte verarbeiten
C-Rückgabewerte werden automatisch in Lua-Typen konvertiert. Ganzzahlen werden zu Lua-Zahlen, char* wird zu lightuserdata. Verwenden Sie ffi.string zur Konvertierung.
ffi.cdef[[ char *getenv(const char *name); ]]
local ptr = ffi.C.getenv("HOME")
if ptr ~= nil then
print(ffi.string(ptr))
endffi.string
ffi.string(ptr, len) konvertiert einen char*-Zeiger in einen Lua-String. Ohne len wird bis zu einem Nullbyte gelesen.
Fehlerbehandlung
C-Funktionen geben Fehlercodes zurück oder setzen errno. Überprüfen Sie Rückgabewerte ausdrücklich. Greifen Sie über ffi.errno() auf errno zu.
ffi.cdef[[ int open(const char *path, int flags); ]]
local fd = ffi.C.open("missing.txt", 0)
if fd < 0 then
print("Error:", ffi.errno())
endStruct-Argumente
Übergeben Sie C-Structs als Wert oder Zeiger. Erzeugen Sie sie mit ffi.new.
ffi.cdef[[
typedef struct { int x, y; } Point;
void printPoint(Point p);
]]
local p = ffi.new("Point", {x=3, y=4})
lib.printPoint(p)Zeigerargumente
Übergeben Sie Ausgabezeiger an Funktionen, die mehrere Werte über Zeigerparameter zurückgeben.
ffi.cdef[[
void minmax(double *arr, int n, double *min, double *max);
]]
local arr = ffi.new("double[5]", {5,2,8,1,9})
local mn, mx = ffi.new("double[1]"), ffi.new("double[1]")
lib.minmax(arr, 5, mn, mx)
print(mn[0], mx[0])Leistung von FFI-Aufrufen
FFI-Aufrufe von C-Funktionen haben nahezu keinen Overhead und sind deutlich schneller als Lua-zu-C-Aufrufe über die traditionelle C API. Der JIT kann den Aufruf häufig vollständig inline einfügen.
Variable Funktionen
Variable C-Funktionen (...) müssen mit den korrekten Typen aufgerufen werden. Übergeben Sie bei Bedarf explizite Typumwandlungen, um Mehrdeutigkeiten zu vermeiden.
ffi.C.printf("%d %f\n", ffi.cast("int", 42), ffi.cast("double", 3.14))Sicherheitspraktiken
Überprüfen Sie Rückgabewerte von Zeigern immer auf NULL. Übergeben Sie niemals einen freigegebenen oder außerhalb seines Gültigkeitsbereichs liegenden Zeiger. Verwenden Sie ffi.gc, um Finalizer an C-Speicherreservierungen anzuhängen.
Frage zu FFI-Aufrufen
Wie konvertiert die FFI einen Lua-String in ein C-const char*?
Rückblick: C über die FFI aufrufen
Rufen Sie C-Funktionen über das Bibliotheksobjekt genauso wie Lua-Funktionen auf. Die FFI übernimmt die Typkonvertierung. Verwenden Sie ffi.string für char*-Rückgabewerte, ffi.errno() für Fehler und ffi.new für Struct- und Array-Argumente.
Lerne Lua mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 40
- Lektionen
- 159
Häufig gestellte Fragen
Ist die Lektion „C-Funktionen über FFI aufrufen“ kostenlos?
Ja — der vollständige Text von „C-Funktionen über FFI aufrufen“ 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 „C-Funktionen über FFI aufrufen“?
Rufen Sie libc- und eigene Funktionen gemeinsam genutzter Bibliotheken ohne zusätzlichen Overhead aus Lua auf 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 2 von 4.
Wie lange dauert die Lektion „C-Funktionen über FFI aufrufen“?
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
- FFI-Grundlagen: ffi.cdef und ffi.load
- C-Funktionen über FFI aufrufen
- Pointer, Structs und Arrays im FFI
- Callbacks: Lua-Funktionen an C übergeben