Некоторое время гуглил, понятия не имею, что происходит.
Итак, у меня есть класс с именем luaScript, который обрабатывает сценарии lua (Удивительно! Я знаю.), Которые в своем текущем состоянии не могут выйти или приостановить выполнение сценариев, выполняемых в данный момент.
Я узнал о хуках, которые позволяют мне запускать код каждый раз, когда что-то происходит.
Также нашел интересный вопрос от stackoverflow 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);
Я полностью озадачен этим и часами гуглял, может кто-нибудь объяснить, какую глупую ошибку я совершил?
Я думаю, что hookRoutine
является обычной функцией-членом вашего класса. Вместо этого она должна быть статической функцией-членом, потому что Lua ничего не знает о C ++ и this
указатель. Вам нужно найти какой-то другой способ пройти this
указатель на функцию хука в случае необходимости (возможно, путем сохранения ее в состоянии Lua в реестре).
Других решений пока нет …