C调Lua函数

转载 2016年05月31日 17:40:38

C 调用 lua 函数

需要考虑的问题:  
1. 使用 lua_pcall 可以调用 lua 函数,首先把 lua 函数入栈,然后把参数入栈, lua_pcall(luaState, 参数个数, 返回值个数, 0) ;  
2. 为了在事件触发时回调 lua 函数,需要把 lua 函数保存起来,使用 luaL_ref(luaState, LUA_REGISTRYINDEX) 将位于栈顶的 lua 函数保存到 LUA_REGISTRYINDEX 表里面, LUA_REGISTRYINDEX 是一个全局表, luaL_ref 将返回 lua 函数在 LUA_REGISTRYINDEX 表中的位置 nRef ;  
3. 使用 lua_rawgeti(luaState, LUA_REGISTRYINDEX, nRef) 获取之前保存的 lua 函数,nRef 是 lua 函数在 LUA_REGISTRYINDEX 表中的位置, lua 函数将被放到栈顶,这时就可以使用 lua_pcall 调用 lua 函数了;  
4. 使用 luaL_unref(luaState, LUA_REGISTRYINDEX, nRef) 可以从 LUA_REGISTRYINDEX 表中删除之前保存的 lua 函数;


示例:  

复制代码
int LuaTest::Attach(lua_State* luaState)
{
    if(lua_isfunction(luaState, 1) != 1)
    {
        return 0;
    }
    lua_settop(luaState, 1);
    m_nRef = luaL_ref(luaState, LUA_REGISTRYINDEX);   // 保存到 LUA_REGISTRYINDEX 表
    lua_pushinteger(luaState, nRef);
    
    return 1;
}

int LuaTest::Detach(lua_State* luaState)
{
    m_nRef = luaL_checknumber(luaState, 1);
    luaL_unref(luaState, LUA_REGISTRYINDEX, nRef);    // 从 LUA_REGISTRYINDEX 表中删除
    m_nRef = 0;
    
    return 0;
}

// 事件监听函数
void LuaTest::EventListener(lua_State* luaState)
{
    lua_rawgeti(luaState, LUA_REGISTRYINDEX, m_nRef);  // 从 LUA_REGISTRYINDEX 表中获取
    lua_pushstring(luaState, "参数1");
    lua_pushstring(luaState, "参数2");
    lua_pcall(luaState, 2, 1, 0);               // 调用 lua 函数
    int nRet = luaL_checknumber(luaState, -1);  // 返回值
}
复制代码

 

相关文章推荐

C调lua出错,返回c层打印错误信息.

c调lua出错,返回c层打印错误信息

C模块回调Lua函数的两种方法

作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di C模块回调Lua函数的两种方法 lua和C通过虚拟栈这种交互方式简单而又可靠,缺点就是C做...
  • ani_di
  • ani_di
  • 2013年08月30日 12:47
  • 5263

C/C++与lua互调函数的方法

1,在lua脚本中调用C/C++代码中的函数 在C++中定义函数时必须以lua_State为参数, 以int为返回值才能被Lua所调用。 /* typedef int (*lua_CFuncti...

编写LUA 可调用的C 函数技巧

1. 数组操作:     在Lua中,“数组”只是table的一个别名,是指以一种特殊的方法来使用table。出于性能原因,Lua的C API为数组操作提供了专门的函数,如:     void l...

C/C++与lua互调函数的方法

1,在lua脚本中调用C/C++代码中的函数 在C++中定义函数时必须以lua_State为参数, 以int为返回值才能被Lua所调用。 /* typedef int (*lua_C...

lua调用C/C++函数

  • 2014年08月27日 17:02
  • 1KB
  • 下载

Lua中调用C函数

  • 2013年02月11日 22:48
  • 67KB
  • 下载

cocos2dx关于在c/c++中调用lua函数

关于在c/c++中调用lua函数

Lua知识点全面总结(语法、控制语句、函数、模块、面向对象/prototype、和C的交互等等)

原文链接:http://blog.csdn.net/peerlessbloom/article/details/44081153 基础 弱类型,没有类型定义解释型语言,但是会通过编...
  • Tovids
  • Tovids
  • 2017年02月05日 21:58
  • 146

C/C++中用Lua函数

1.简介   偶们这次主要说说怎么由Lua定义函数, 然后在C或者C++中调用. 这里偶们   暂不涉及C++的对象问题, 只讨论调用函数的参数, 返回值和全局变量的使用.      2.程序...
  • xum2008
  • xum2008
  • 2013年05月16日 20:54
  • 814
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C调Lua函数
举报原因:
原因补充:

(最多只允许输入30个字)