Récemment, j’ai réussi à intégrer LUA dans mon application C. Ce que j’essaie de faire, c’est que j’ai une valeur (Session_ID) que je souhaite transmettre de la fonction C à un script LUA afin qu’elle puisse être utilisée par le script LUA pour appeler une fonction de retour en C.
Je n’ai aucun problème à charger le script LUA en C et à l’exécuter (à l’aide de lua_pcall), et je n’ai aucun problème à appeler la fonction C depuis LUA; mon problème actuel consiste à faire passer la variable globale dans les deux sens.
Par exemple:
Côté C (test.c):
session_id = 1; luabc_sz = rlen; result = lua_load(L, luaByteCodeReader, file, "script", "bt"); if( lua_pcall(L, 0, 0, 0) != 0 )
Où fichier est le tableau contenant le script LUA (script.lua).
Du côté de Lua (script.lua):
print "Start" for i=1,10 do print(i, **session_id**) end print "End"
“print” est écrasé par ma propre fonction et je souhaite lui transmettre l’ identificateur session_id . Ainsi, le scénario complet est que j’ai l’ identificateur session_id dans la fonction c, que je souhaite transmettre au script LUA qui l’utilisera ultérieurement pour appeler la fonction print qui est écrite en C.
Toute aide pour ça :)?
Il suffit de placer session_id
dans la stack et de le transférer dans le script lorsque vous le pcall
. Quelque chose comme:
// ... result = lua_load(L, luaByteCodeReader, file, "script", "bt"); lua_pushinteger(L, session_id); if( lua_pcall(L, 1, 0, 0) != 0 ) // ...
Demandez à votre script d’y accéder comme:
local session_id = ... print "Start" for i = 1, 10 do print(i, session_id) end print "End"
Une autre alternative, bien que moins attrayante, consiste à append session_id
à l’environnement global de lua:
// ... result = lua_load(L, luaByteCodeReader, file, "script", "bt"); lua_pushinteger(L, session_id); lua_setglobal(L, "session_id"); if( lua_pcall(L, 0, 0, 0) != 0 ) // rest of your code
script.lua
peut maintenant accéder à cette valeur de session via session_id
.