Я думал, что я разработал, как кодировать указатели c в ffi для luajit, например, следующее, которое работает по мере необходимости:
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]
Однако, я полностью застрял в том, как определить пустоту *, такую как пустота * 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)
Я либо получаю ошибку, такую как неверный аргумент №2, в «XPLMSetWindowRefCon» (не могу преобразовать «int» в «void *»)
или я получил CTD.
В чем смысл объявлять переменную void * в ffi / luajit?
Ian