ich die folgende C-Struktur haben, die Funktionszeiger enthält:Aufruf C verschachtelte Funktionszeiger von Lua
struct db {
struct db_impl *impl;
void (*test)(struct db *self); // How to invoke it from Lua??
};
void (*db_test)(void); // this I can invoke from Lua
struct db * get_db() {
// create and init db
struct db * db = init ...
db->test = &db_real_impl; // db_real_impl is some C function
return db;
}
So wird die Testfunktion Zeiger nach der Initialisierung auf ein leichtes Funktion. Jetzt muss ich diese Funktion von Lua mit FFI-Bibliothek aufrufen, aber es schlägt mit Fehler: 'void' is not callable
.
local db = ffi.C.get_db()
db.test(db) -- fails to invoke
-- Error message: 'void' is not callable
ffi.C.db_test() -- this works fine
In C würde der Code:
struct db *db = get_db();
db->test(db);
In Lua Ich bin in der Lage leicht frei Funktionszeiger aufzurufen, kann aber nicht Funktionszeiger aus Struktur aufrufen. Wie kann man es von Lua aus aufrufen?
'void (* db_test) (void);' falschen Prototyp sollte 'nichtig (* db_test) (struct db *);' –
Nein, es ist nicht falsch. db_test ist ein anderer Funktionszeiger, er enthält keine Argumente. Es ist sowieso nicht relevant für die Frage – nogard
Ah, warum zeigst du das dann? –