从string_t调用Lua函数

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

例如:

test.lua

function iLoveVodka()
    --some text
end

function iLoveFish()
    --another text
end

C 文件:

string_t a = "iLoveVodka()"

只有函数名称,如何才能从 C/C++ 代码中调用函数 iLoveVodka()

点赞
用户88888888
用户88888888

以下是能够执行两个功能的样本代码:

  • 从相同的目录中加载文件“test.lua”。
  • 尝试调用函数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: %s\n",luaL_checkstring (l, -1) );
          exit(1);
      }

      /**
       * 获取函数并调用它。
       */
      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);

      /**
       * 清理
       */
      lua_close (l);

      return 0;
  }

可以这样编译:

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

只需在test.lua中定义iLoveVodka()函数即可。

2014-07-31 14:14:37