Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling Lua function from string_t

Tags:

c++

lua

I have some functions declared and initialized in .lua file. Then, when I receive signal, I read string_t variable with the name of function to call from file. The problem is that I don't know how to push function to stack by its name or call it.

For example:

test.lua

function iLoveVodka()
    --some text
end

function iLoveFish()
    --another text
end

C File:

string_t a = "iLoveVodka()"

How can i call function from C/C++ code iLoveVodka() only by having its name?

like image 818
VIRUS Avatar asked Apr 10 '26 18:04

VIRUS


1 Answers

Here is some sample code that does two things:

  • Loads the file "test.lua" from the same directory.
  • Tries to call the function iLoveVodka(), if it can be found.

You should be able to build this easily enough:

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


   int main( int argc, char *argv[])
   {
      lua_State *l = luaL_newstate ();
      luaL_openlibs (l);

      int error = luaL_dofile (l, "test.lua");
      if (error)
      {
          printf( "Error loading test.lua: %s\n",luaL_checkstring (l, -1) );
          exit(1);
      }

      /**
       * Get the function and call it
       */
      lua_getglobal(l, "iLoveVodka");
      if ( lua_isnil(l,-1) )
      {
          printf("Failed to find global function iLoveVodka\n" );
          exit(1);
      }

      lua_pcall(l,0,0,0);

      /**
       * Cleanup.
       */
      lua_close (l);

      return 0;
  }

This can be compiled like this:

 gcc -O -o test `pkg-config --libs --cflags lua5.1`  test.c

Just define your iLoveVodka() function inside test.lua, and you should be OK.


Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!