Создание структуры обратных вызовов в LuaJIT FFI

Итак, сначала я загружаю 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)?


person theman    schedule 18.06.2014    source источник


Ответы (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 для получения более подробной информации об обратных вызовах.

person Colonel Thirty Two    schedule 18.06.2014