2017-11-19 1 views
2

Googeln für eine Weile, habe keine Ahnung, was passiert. Also habe ich eine Klasse namens luaScript, die behandelt, lua Skripte (Surprising! Ich weiß.), Die in ihrem aktuellen Zustand, konnte nicht beenden oder pausieren Skripte derzeit ausgeführt werden.Lua C++ Lib Sethook: Gibt Fehler mit Hook-Funktion arg

Ich habe von Hooks erfahren, die es mir ermöglichen, jedes Mal Code auszuführen, wenn etwas passiert. Auch eine coole stackoverflow Frage von 2009, die zeigt, wie man sie benutzt.

Kopierter Code, habe Haken gemacht, versucht zu kompilieren, und ... nichts. nichts anderes als eine Fehlermeldung, dass die Funktion, die ich bestehen (void hookRoutine(lua_State *L, lua_Debug *ar)) war unvereinbar mit der Art lua_Hook (was ich total bs finden, weil lua_Hook als typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); definiert wird, die soweit ich weiß, ist genau das, was ich ihn gab.)

Dies ist der Code, den ich kopiert habe: lua_sethook(mL, hookRoutine, LUA_MASKCOUNT, 0); mL wobei die Lua-Instanz und hookRoutine der Haken ist.

Dinge, die ich bisher versucht habe:

lua_Hook hookRoutine 
lua_sethook(mL, &hookRoutine, LUA_MASKCOUNT, 0); 
lua_sethook(mL, lua_Hook(hookRoutine), LUA_MASKCOUNT, 0); 

ich voll und ganz auf diese bin ratlos und haben stundenlang googeln, kann jemand bitte erklären, welche Art von dummen Fehler gemacht ich?

Antwort

0

Meine Vermutung ist, dass hookRoutine eine reguläre Mitgliedsfunktion Ihrer Klasse ist. Es muss stattdessen eine statische Memberfunktion sein, da Lua nichts über C++ und den this Zeiger weiß. Sie müssen einen anderen Weg finden, um den Zeiger this an Ihre Hook-Funktion zu übergeben, falls Sie sie brauchen (wahrscheinlich indem Sie sie im Lua-Zustand in der Registrierung speichern).