lua与C交互函数

在lua中,lua堆栈就是一个struct,堆栈索引的方式是正数也可以是负数,区别是:正数索引1永远表示栈低,负数索引-1永远表示栈顶。

        栈顶
    4 ------------- -1
    3 ------------- -2
    2 ------------- -3
    1 ------------- -4
        栈底

lua_gettop (lua_State *L) 返回栈顶索引(即栈长度)
lua_settop(lua_State * L, int index) 将栈顶设置为一个指定的位置

修改栈中元素的数量。如果值比原栈顶高,则高的部分nil补足,如果值比原栈低,则原栈高出的部分舍弃,所以可以用lua_settop(0)来清空栈。

luaL_newstate 内存分配

接受两个参数,一个类型为lua_Alloc,另一个是void*,lua_Alloc 定义一个lua_Alloc的函数指针类型,其返回值为void

详解luaL_newstate()

luaL_loadfile 加载一个lua文件

lua_pcall 运行编译好的程序块

lua_getglobal 将全局变量值压入栈中

lua_to* 将字段的值从栈中读取

  • lua_tonumber
  • lua_toboolean
  • lua_tolstring
  • lua_tointeger
  • lua_tocfunction

lua_push* 将一个需要设置的值放到栈中

  • lua_pushnumber
  • lua_pushboolean
  • lua_pushlstring
  • lua_pushinteger
  • lua_pushcfunction

lua_getfield 读取table中字段的值,并将值压入栈中

-- 读取全局的数据到栈中
 lua_getglobal(L, "background");

 --读取table中字段的值,将值压入栈中
 lua_getfield(L, -1, "r");

lua_setfield 将某个值设置到table中

--将需要设置的值设置到栈中
 lua_pushnumber(L, 0.55);

 --将这个值设置到table中
 lua_setfield(L, -2, "r");

lua_pushcfunction(L, functionName) 将函数放入栈中

示例

--hello.lua
str = "i am so cool"
table = {name = "zhang", id = 1}
function add(a,b)
    return a+b
end
//test.cpp
void main()
{
    //1.创建lua状态
    lua_State *L = luaL_newstate();
    if(L == NULL)
    {
        return;
    }

    //2.加载lua文件
    int bRet = luaL_loadfile(L,"hello.lua");

    //3.运行lua文件
    bRet = lua_pcall(L,0,0,0);

    //4.读取变量
    lua_getglobal(L,"str");

    //5.读取table
    lua_getglobal(L,"table");
    lua_getfield(L,-1,"name");

    //6.读取函数
    lua.getglobal(L,"add");//获取函数,压入栈中
    lua.pushnumber(L,10);//压入第一个参数
    lua.pushnumber(L,20);//压入第二个参数
    int iRet = lua_pcall(L,2,1,0);//调用函数,调用完以后,会将返回值压入栈中,2表示参数个数,1表示返回值个数

    //至此,栈中情况
//      栈顶
//  索引      类型      值
//----------------------------------------
//  4       int:        30
//  3       string:     zhang
//  2       table:      table
//  1       string:     i am so cool
//-----------------------------------------
//      栈底
}

参考网址:

Lua和C++交互

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值