2016-05-04 12 views
1

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?

+1

'void (* db_test) (void);' falschen Prototyp sollte 'nichtig (* db_test) (struct db *);' –

+0

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

+0

Ah, warum zeigst du das dann? –

Antwort