Как программировать указатель на функцию c в ffi / luajit - PullRequest
0 голосов
/ 27 октября 2018

Совершенно неофит, когда дело доходит до ffi, ищет помощи в получении этой декларации c / c ++, закодированной в lua через ffi.

Как я читаю код, у меня есть функция, у которой указатель на функцию является одним из переданных параметров. Я могу быть совершенно неправ, я сказал, что я неофит!

Это typedef:

ffi.cdef[[typedef void (* XPLMReceiveMonitorBoundsGlobal_f)(
                               int                  inMonitorIndex,    
                               int                  inLeftBx,    
                               int                  inTopBx,    
                               int                  inRightBx,    
                               int                  inBottomBx,    
                               void *               inRefcon);]]

и это определение функции:

ffi.cdef("void XPLMGetAllMonitorBoundsGlobal(XPLMReceiveMonitorBoundsGlobal_f inMonitorBoundsCallback, void * inRefcon)")

Я пытался угадать, как кодировать это в lua около 4 часов, используя все, что моё воображение могло собрать, например:

XPLM.XPLMGetAllMonitorBoundsOS(XPLMReceiveMonitorBoundsOS_f(monindex, leftpx, toppx, rightpx, bottompx, nil), nil)

XPLM.XPLMGetAllMonitorBoundsOS(), nil)

Я ничего не думал о работах, и поиски в Google и много чтения не приблизили меня к ответу.

Кодировка для приложения lua в симуляторе полета XPlane, самая близкая вещь к полученной ошибке:

"attempt to call global 'XPLMReceiveMonitorBoundsOS_f' (a nil value)"

Может быть, мне нужно что-то определить с помощью ffi.new (), ffi.cast () и т. Д., И т. Д., Что бы я ни говорил, я не смог придумать ответ.

Любая помощь с благодарностью.

Ian

...