从string_t调用Lua函数

Calling Lua function from string_t

本文关键字:Lua 函数 调用 string      更新时间:2023-10-16

我在.lua文件中声明和初始化了一些函数。然后,当我接收到信号时,我读取string_t变量,其中包含要从文件中调用的函数的名称。问题是我不知道如何将函数按其名称推入堆栈或调用它。

例如:

test.lua

function iLoveVodka()
    --some text
end
function iLoveFish()
    --another text
end

C文件:

string_t a = "iLoveVodka()"

我怎么能从C/c++代码iLoveVodka()调用函数只有它的名字?

下面是一些做两件事的示例代码:

  • 加载test文件。
  • 尝试调用函数iLoveVodka(),如果可以找到它。

你应该能够很容易地构建这个:

  #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: %sn",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 iLoveVodkan" );
          exit(1);
      }
      lua_pcall(l,0,0,0);
      /**
       * Cleanup.
       */
      lua_close (l);
      return 0;
  }

可以这样编译:

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

只要在test.lua中定义iLoveVodka()函数,就可以了。