LUA 调用 C 时候获取参数个数

在栈顶的就是参数个数


static int  lua_call_server_method(lua_State* L)
{
    
    int argc = lua_gettop(L);
    
    const char* method_name = luaL_checkstring(L, 1);
    
    for(int i = 2 ; i <= argc ; i++ ){
        
        int type = lua_type(L, i);
        
        switch(type){
        
            case LUA_TTABLE:
                break;
            case LUA_TSTRING:
                break;
            case LUA_TNUMBER:
                break;
        }
        
        printf("%d\n", type);
        
    }
    
    return 1;
    
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lua与C的相互调用Lua的一个重要特性,可以使得Lua获得更高的灵活性和扩展性。Lua提供了一系列的API函数,使得Lua与C之间的交互变得更加容易。下面我将介绍一下Lua与C相互调用的一些基本知识和方法: 1. Lua调用C函数 Lua调用C函数的方法很简单,只需要将C函数注册到Lua中即可。我们可以使用lua_register函数将C函数注册到Lua中,然后在Lua脚本中使用该函数即可。例如,下面的代码将一个名为add的C函数注册到Lua中: ``` int add(lua_State* L) { int a = luaL_checknumber(L, 1); int b = luaL_checknumber(L, 2); lua_pushnumber(L, a + b); return 1; } int luaopen_mylib(lua_State* L) { lua_register(L, "add", add); return 1; } ``` 在上面的代码中,我们定义了一个名为add的C函数,该函数接受两个整数参数,然后将它们相加并将结果压入Lua中。接着我们使用lua_register函数将该函数注册到Lua中,并将其命名为add。最后我们将该函数打包成一个Lua模块,并使用luaopen_mylib函数将其注册到Lua中。 在Lua脚本中,我们可以像下面这样使用add函数: ``` local mylib = require "mylib" print(mylib.add(1, 2)) -- 输出3 ``` 2. C调用Lua函数 C调用Lua函数的方法比较复杂,需要使用一系列的API函数。下面是一个简单的示例: ``` int call_lua_function(lua_State* L) { // 加载Lua脚本 luaL_dofile(L, "test.lua"); // 获取Lua全局变量test lua_getglobal(L, "test"); // 判断test是否为函数 if (!lua_isfunction(L, -1)) { printf("test is not a function\n"); return 0; } // 压入函数参数 lua_pushnumber(L, 1); lua_pushnumber(L, 2); // 调用函数 lua_call(L, 2, 1); // 获取函数返回值 int result = lua_tonumber(L, -1); printf("result = %d\n", result); return 0; } ``` 在上面的代码中,我们首先使用luaL_dofile函数加载了一个名为test.luaLua脚本,然后使用lua_getglobal函数获取了一个名为test的全局变量,接着使用lua_pushnumber函数压入了两个参数,最后使用lua_call函数调用了test函数,并将返回值压入了Lua中。我们可以使用lua_tonumber函数获取返回值并将其转换为C语言中的整数类型。 在Lua脚本中,我们可以这样定义test函数: ``` function test(a, b) return a + b end ``` 在这个示例中,我们定义了一个名为test的函数,该函数接受两个参数,然后将它们相加并返回结果。 这就是Lua与C相互调用的基本方法,通过这些方法,我们可以在Lua中使用C函数,也可以在C程序中调用Lua函数,从而实现更加灵活和高效的程序设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值