Lua C++ lib sethook: выдает ошибку с помощью функции ловушки arg
Некоторое время гуглил, понятия не имею, что происходит. Итак, у меня есть класс с именем luaScript, который обрабатывает сценарии lua (Удивительно! Я знаю.), Которые в своем текущем состоянии не могут выйти или приостановить выполнение сценариев, выполняемых в данный момент.
Я узнал о хуках, которые позволяют мне запускать код каждый раз, когда что-то происходит. Также нашел интересный вопрос от stackru 2009 года, показывающий, как их использовать.
Скопировал код, сделал хук, попытался скомпилировать и... ничего. Ничего, кроме ошибки, говорящей, что функция, которую я прошел void hookRoutine(lua_State *L, lua_Debug *ar)
) был несовместим с типом lua_Hook
(Который я нахожу всего BS, потому что lua_Hook
определяется как typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
что, насколько я знаю, это именно то, что я дал.)
Это код, который я скопировал:lua_sethook(mL, hookRoutine, LUA_MASKCOUNT, 0);
mL
будучи экземпляром Луа и hookRoutine
быть крюком
Вещи, которые я пробовал до сих пор:
lua_Hook hookRoutine
lua_sethook(mL, &hookRoutine, LUA_MASKCOUNT, 0);
lua_sethook(mL, lua_Hook(hookRoutine), LUA_MASKCOUNT, 0);
Я полностью озадачен этим и часами гуглял, может кто-нибудь объяснить, какую глупую ошибку я совершил?
1 ответ
Я думаю, что hookRoutine
является обычной функцией-членом вашего класса. Вместо этого она должна быть статической функцией-членом, потому что Lua ничего не знает о C++ и this
указатель. Вам нужно найти какой-то другой способ пройти this
указатель на функцию хука в случае необходимости (возможно, путем сохранения ее в состоянии Lua в реестре).