在 Lua 中调用 C 嵌套函数指针

我有以下包含函数指针的 C 结构体:

struct db {
    struct db_impl *impl;
    void (*test)(struct db *self); // 如何从 Lua 中调用它?
};
void (*db_test)(void); // 我可以从 Lua 中调用这个

struct db * get_db() {
    // 创建并初始化 db
    struct db * db = init ...
    db->test = &db_real_impl; // db_real_impl 是某个 C 函数
    return db;
}

因此,在初始化后,test 函数指针指向某个函数。 现在我需要使用 FFI 库从 Lua 中调用该函数,但是会出现错误:“'void' 不可调用”。

local db = ffi.C.get_db()
db.test(db)  -- 无法调用
-- 错误信息:'void' 不可调用

ffi.C.db_test()  -- 这个可以正常工作

在 C 中,代码是这样的:

struct db *db = get_db();
db->test(db);

在 Lua 中,我可以轻松调用自由函数指针,但无法调用结构体中的函数指针。如何从 Lua 中调用它?

点赞
用户2037823
用户2037823

一个解决方案在这里提出了: http://lua-users.org/lists/lua-l/2015-07/msg00172.html

ffi.cdef[[
    typedef void (*test)(struct db *);
]]

local db = get_db()
local call = ffi.cast("test", db.test)
call(db)
2016-05-10 15:26:35