将参数传递给我的lua dll函数

时间:2012-04-02 23:13:14

标签: c windows linux lua

如何将参数传递给我的lua dll函数?

我做了一个简单的lua dll函数:

static int functionName(lua_State *L, int arg1, char arg2[])
{
printf("running my dll:\n");
printf("passing number: %d   passing string = %s",arg1,arg2);
return 0;
}

在lua中使用它来运行函数:

require "myTestDll";
myTestDll.functionName(1231544,"Hello World, I'm running my DLL.");

但结果是它输出了错误的数字,甚至没有接近正确的字符串。

1 个答案:

答案 0 :(得分:4)

您注册到Lua的函数必须始终具有相同的C或C ++签名:int FuncName(lua_State*);它们不能使用或多于此参数。

传递给已注册函数的Lua参数是lua_State*的一部分。它们是放在Lua堆栈上的第一个值。因此,您可以调用lua_gettop来获取参数的数量。你可以使用通常的Lua堆栈函数将它们从堆栈中拉出来。

例如,如果您希望函数有两个参数,其中第一个是数字,第二个是字符串,则执行以下操作:

int functionName(lua_State *L)
{
  int arg1 = 0;
  const char *arg2 = NULL;
  size_t arg2Len = 0; //Lua strings have an explicit length; they can contain null characters.

  if(lua_gettop(L) != 2)
  {
    lua_pushstring(L, "Must provide two parameters to this Lua function.");
    lua_error(L);
  }

  arg1 = luaL_checkinteger(L, 1);
  arg2 = luaL_checklstring(L, 2, &arg2Len);

  //Do stuff with arguments.
}