在LuaJIT FFI中创建回调结构

时间:2014-06-18 04:17:49

标签: c dll lua ffi luajit

首先我加载一个我需要的DLL

local ffi = require("ffi")
local theDLL = ffi.load("thisDLL")
在ffi cdef我有这个结构

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函数回调结构)?

1 个答案:

答案 0 :(得分:1)

只需创建结构并将字段分配给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 callback docs