In einer C-Funktion, die von meinem Lua-Skript aufgerufen wird, verwende ich luaL_ref
, um einen Verweis auf eine Funktion zu speichern. Wenn ich dann versuche, den zurückgegebenen Integer-Index zu verwenden, um diese Funktion von einem anderen Thread abzurufen, der nicht vom selben Status abgeleitet ist, bekomme ich nur nil
zurück. Hier ist das einfachste Beispiel, das es zu zeigen scheint:Lua Registrierung nicht sichtbar von neuen Zuständen
// Assumes a valid lua_State pL, with a function on top of the stack
int nFunctionRef = luaL_ref(pL, LUA_REGISTRYINDEX);
// Create a new state
lua_State* pL2 = luaL_newstate();
lua_rawgeti(pL2, LUA_REGISTRYINDEX, nFunctionRef);
const char* szType = luaL_typename(pL2, -1);
Ich finde, dass szType
enthält dann den Wert ‚Null‘.
Mein Verständnis war, dass die Registrierung global zwischen allen C-Code geteilt wurde, so kann jeder erklären, warum das nicht funktioniert?
Wenn die Registrierung auf diese Weise nicht global freigegeben ist, wie kann ich auf meine Werte zugreifen, die ich von einem anderen Skript benötige?
Das Registrierungskennzeichen wurde entfernt, da es offensichtlich auf die Windows-Registrierung verweist. – akauppi