Comment passer d’une valeur globale de C à LUA?

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 .