Utilisation du Lua 5.3.4 API C, cela fonctionne:Quelle est la différence entre "dofile" dans lua et "luaL_dofile" dans l'API C?
luaL_dostring(lua, "dofile('mnemonics.lua')");
Mais cela ne fonctionne pas pour exécuter le fichier:
luaL_dofile(lua, "mnemonics.lua");
Au lieu de cela, il signale "tentative d'appeler une valeur de chaîne".
Quand je remplace avec
luaL_loadfile(lua, "mnemonics.lua");
retourne LUA_OK
, mais il ne pousse pas une fonction sur la pile comme il est censé. En fait, la pile est vide (gettop
signale 0) par la suite.
Je peux utiliser la solution de contournement dostring, mais soit il me manque quelque chose, soit il y a un bug.
C'est vraiment bizarre. Une conjecture sauvage: quelque chose qui est arrivé plus tôt dans votre code C a corrompu votre état de 'lua'? Essayez d'exécuter le programme avec Valgrind. –
Pouvez-vous nous montrer un exemple minimal qui reproduit le problème que vous voyez parce que je ne peux pas. – greatwolf
Dans la recherche d'un exemple minimal, j'ai trouvé que le problème était causé en essayant de faire apparaître une pile vide. J'avais mal compris le comportement d'un appel à 'lua_settable'. Je crois que la raison pour laquelle la commande Lua a fonctionné quand la commande de l'API C n'était pas est que la pile est nettoyée lors de la transition entre le code C et le code Lua. – Octa9on