Lua Chiamando le funzioni Lua


Esempio

#include <stdlib.h>

#include <lauxlib.h>
#include <lua.h>
#include <lualib.h>

int main(void)
{
    lua_State *lvm_hnd = lua_open();
    luaL_openlibs(lvm_hnd);

    /* Load a standard Lua function from global table: */
    lua_getglobal(lvm_hnd, "print");

    /* Push an argument onto Lua C API stack: */
    lua_pushstring(lvm_hnd, "Hello C API!");

    /* Call Lua function with 1 argument and 0 results: */
    lua_call(lvm_hnd, 1, 0);

    lua_close(lvm_hnd);

    return EXIT_SUCCESS;
 }

Nell'esempio sopra stiamo facendo queste cose:

  • creando e configurando Lua VM come mostrato nel primo esempio
  • ottenere e spingere una funzione Lua dalla tabella Lua globale allo stack virtuale
  • spingendo la stringa "Hello C API" come argomento di input sullo stack virtuale
  • istruire VM per chiamare una funzione con un argomento che è già in pila
  • chiusura e pulizia

NOTA:

Ricordatevi che lua_call() apre la funzione e gli argomenti dalla pila lasciano solo il risultato.

Inoltre, sarebbe più sicuro usare invece Lua protected call - lua_pcall() .