【问题标题】:passing arguments to my lua dll function将参数传递给我的 lua dll 函数
【发布时间】:2012-04-16 14:58:51
【问题描述】:

如何将参数传递给我的 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 中使用 this 来运行函数:

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

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

【问题讨论】:

    标签: c windows linux lua


    【解决方案1】:

    注册到 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.
    }
    

    【讨论】:

    • 谢谢。唯一的事情是我在编译“分配丢弃指针目标类型的限定符”时收到警告。而且,当我运行与以前相同的 lua 代码时,它会在说“必须提供两个参数...”时出错。这是为什么呢?
    • @user1058431, luaL_checklstring 返回const char*,所以它必须是arg2 的类型。 if 应为 if(lua_gettop(L) != 2)
    猜你喜欢
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2012-12-02
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    相关资源
    最近更新 更多