在LuaJIT FFI中创建一个回调函数的结构体

首先,我需要加载一个 DLL:

local ffi = require("ffi")
local theDLL = ffi.load("thisDLL")

fficdef 中,我有这个结构体:

ffi.cdef [[
typedef struct {
    /*
    * begin_proj callback
    */
    bool (__cdecl *begin_proj)(char *proj);

    /*
    * save_proj_state
    */
    bool (__cdecl *save_proj_state)(unsigned char **buffer, int *len);
} StructCallbacks;

此外,在 cdef 中还有这个函数:

__declspec(dllexport) int __cdecl start_session(StructCallbacks *cb);

现在我想调用这个函数:

print(theDLL.start_session(myCallbacks))

问题是,我该如何传递函数需要的结构体(如何将 myCallbacks 转换为包含 Lua 函数的回调结构体)?

点赞
用户646619
用户646619

只需创建结构并将字段分配给 Lua 函数,就像处理任何其他值一样。

local callbacks = ffi.new("StructCallbacks")

callbacks.begin_proj = function(proj) return false end
callbacks.save_proj_state = function(buffer, len) return true end

有关回调函数的更深入信息,请参阅FFI 回调文档

2014-06-18 14:11:07