在 ffi/luajit 中编写 void* 时出现问题

我以为我已经解决了如何在 luajit 的 ffi 中编写 c 指针的问题,例如以下我需要的代码:

ffi.cdef("void XPLMGetWindowGeometry(XPLMWindowID inWindowID, int * outLeft, int * outTop, int * outRight, int * outBottom)")   DONE
local wLeft = ffi.new("int[1]")
local wRight = ffi.new("int[1]")
local wTop = ffi.new("int[1]")
local wBottom = ffi.new("int[1]")
local winLeft, winTop, winRight, winBottom = 0,0,0,0
XPLM.XPLMGetWindowGeometry(xplm_wnd, wLeft, wTop, wRight, wBottom)
winLeft, winTop, winRight, winBottom = wLeft[0], wTop[0], wRight[0], wBottom[0]

然而,我完全不知道如何定义 void*,例如下面的 inRefcon,到目前为止我尝试的所有方法都失败了。

代码如下:

ffi.cdef("void * XPLMSetWindowRefCon(XPLMWindowID inWindowID, void * inRefcon)")
-- define pointer in ffi - see below --
XPLM.XPLMSetWindowRefCon(xplm_wnd, cdata)

我以为我可以编写 int* 并传递,但显然不行!尝试了以下所有变化:

local refcon = ffi.new("int[1]")
local refconp = ffi.new("char[1024]", "hello")
local refcon = refconp[0]
local refcon = ffi.typeof("$ *", hello)
local refcon = ffi.typeof("int* [?]")
local refcon = ffi.new("int[1]")
local refcon = ffi.cast("void *", 12)
refcon[0] = 12
local refcon = ffi.new("char [1024]", "foobar")
local refconp = ffi.new("int *")
local refcon = refconp
local refcon = ffi.new("int[10]", 12)

我要么得到一个错误,例如 bad argument #2 to 'XPLMSetWindowRefCon' (cannot convert 'int' to 'void *'),要么就会出现 CTD。

在 ffi/luajit 中声明一个 void* 变量的诀窍是什么?

Ian

点赞