【问题标题】:Creating a struct of callbacks in LuaJIT FFI在 LuaJIT FFI 中创建回调结构
【发布时间】:2014-08-08 05:50:57
【问题描述】:

所以首先我加载一个我需要的 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 函数的回调结构)?

【问题讨论】:

    标签: c dll lua ffi luajit


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      相关资源
      最近更新 更多