Довольно новичок, когда дело доходит до 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 () и т.д.
Любая помощь очень ценится.
Ян
Спасибо за информацию, попробую.
XPLMReceiveMonitorBoundsOS_f
- это не функция, это заполнитель для функции обратного вызова. Вы должны написать функцию обратного вызова на C, затемffi.cast
ее указатель на соответствующий ctype и передать его в качестве первого аргумента вXPLMGetAllMonitorBoundsOS
.