1.

lua函数都在refid_fun

refid_fun[refid] = fun

TOLUA_API int toluafix_ref_function(lua_State* L, int lo, int def)
{
// function at lo
if (!lua_isfunction(L, lo)) return ; s_function_ref_id++; lua_pushstring(L, TOLUA_REFID_FUNCTION_MAPPING);
lua_rawget(L, LUA_REGISTRYINDEX); /* stack: fun ... refid_fun */
lua_pushinteger(L, s_function_ref_id); /* stack: fun ... refid_fun refid */
lua_pushvalue(L, lo); /* stack: fun ... refid_fun refid fun */ lua_rawset(L, -); /* refid_fun[refid] = fun, stack: fun ... refid_ptr */
lua_pop(L, ); /* stack: fun ... */ return s_function_ref_id; // lua_pushvalue(L, lo); /* stack: ... func */
// return luaL_ref(L, LUA_REGISTRYINDEX);
}
static int tolua_Cocos2d_CCScriptEventDispatcher_addNodeEventListener00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
tolua_Error tolua_err;
if (
!tolua_isusertype(tolua_S,,"CCScriptEventDispatcher",,&tolua_err) ||
!tolua_isnumber(tolua_S,,,&tolua_err) ||
(tolua_isvaluenil(tolua_S,,&tolua_err) || !toluafix_isfunction(tolua_S,,"LUA_FUNCTION",,&tolua_err)) ||
!tolua_isnumber(tolua_S,,,&tolua_err) ||
!tolua_isnoobj(tolua_S,,&tolua_err)
)
goto tolua_lerror;
else
#endif
{
CCScriptEventDispatcher* self = (CCScriptEventDispatcher*) tolua_tousertype(tolua_S,,);
int event = ((int) tolua_tonumber(tolua_S,,));
LUA_FUNCTION listener = ( toluafix_ref_function(tolua_S,,));
int tag = ((int) tolua_tonumber(tolua_S,,));
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'addScriptEventListener'", NULL);
#endif
{
int tolua_ret = (int) self->addScriptEventListener(event,listener,tag);
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
}
}
return ;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'addNodeEventListener'.",&tolua_err);
return ;
#endif
}

比如;lua代码item:addNodeEventListener,CCScriptEventDispatcher* self===item,int event===cc.MENU_ITEM_CLICKED_EVENT,

LUA_FUNCTION listener =
function(tag)
if sound then audio.playSound(sound) end
listener(tag)
end
--[[--

创建一个文字标签菜单项,并返回 CCMenuItemLabel 对象。

可用参数:

-   listener: 回调函数
- tag: 按钮的 Tag,会传入回调函数。多个按钮使用同一个回调函数时,可根据 Tag 区分哪一个按钮被按下(可选)
- x, y: 坐标(可选)
- sound: 按钮按下时播放什么音效(可选) 以及所有可以用于 ui.newTTFLabel() 的参数。 @param table params 参数表格对象 @return CCMenuItemLabel CCMenuItemLabel对象 ]] function ui.newTTFLabelMenuItem(params)
local p = clone(params)
p.x, p.y = nil, nil
local label = ui.newTTFLabel(p) local listener = params.listener
local tag = params.tag
local x = params.x
local y = params.y
local sound = params.sound local item = CCMenuItemLabel:create(label)
if item then
if type(listener) == "function" then
item:addNodeEventListener(cc.MENU_ITEM_CLICKED_EVENT, function(tag)
if sound then audio.playSound(sound) end
listener(tag)
end)
end
if x and y then item:setPosition(x, y) end
if tag then item:setTag(tag) end
end return item
end self.item1 = ui.newTTFLabelMenuItem({text = "计时模式", size = , align = ui.TEXT_ALIGN_CENTER,
x = display.cx, y = display.cy + , color = display.COLOR_GREEN,
listener = function()
app:setData("currentLv", )
app:enterScene("MainScene",)
end})
int CCLuaStack::executeFunctionByHandler(int nHandler, int numArgs)
{
int ret = ;
if (pushFunctionByHandler(nHandler)) /* L: ... arg1 arg2 ... func */
{
if (numArgs > )
{
lua_insert(m_state, -(numArgs + )); /* L: ... func arg1 arg2 ... */
}
ret = executeFunction(numArgs);
}
return ret;
}

http://blog.csdn.net/linchaolong/article/details/37657077

http://www.cppblog.com/kevinlynx/archive/2011/04/24/144905.html

http://blog.csdn.net/rain_qingtian/article/details/48573981

http://blog.csdn.net/lightxm/article/details/38435067

http://www.cnblogs.com/boliu/p/4091274.html

第9月第13天 传递lua匿名函数到c/c++的更多相关文章

  1. 巧用javascript对象属性,向事件绑定的匿名函数内传递循环控制变量的值

    遇到一个需要向匿名函数传递循环控制变量的问题,我受到园子里这篇文章的启发[笔记]js获取当前点击元素的索引,解决了这个问题.现在把代码贴出来,以防止自己忘记. if ($('#labModal').l ...

  2. Lua基础 函数(一)

    转自: http://blog.csdn.net/wzzfeitian/article/details/8653101 在Lua中,函数是对语句和表达式进行抽象的主要方法.既可以用来处理一些特殊的工作 ...

  3. 巨蟒python全栈开发-第13天 内置函数 匿名函数lambda

    一.今日内容总览 1.内置函数(1):并不是每一个内置函数都是那么常用 上菜:内置函数部分//思维导图:https://www.processon.com/view/link/5b4ee15be4b0 ...

  4. lua基础---函数

    Lua的函数功能很强大,保留了C语言的一些基本的特性,但是也有C语言没有的特性,比如,lua可以在一个函数返回多个值,我们来看看下面这个案例: 解释运行: lua test5.lua --定义一个函数 ...

  5. lua的函数初识

    学习到Lua的函数.认为有必要记下来. 參考教程:Programming in Lua 函数能够以表达式或陈述语句出现,例如以下所看到的: print(8*9, 9/8) a = math.sin(3 ...

  6. Lua 常用函数 一

    lua_getallocf lua_Alloc lua_getallocf (lua_State *L, void **ud); 返回给定状态机的内存分配器函数.如果 ud 不是 NULL ,Lua ...

  7. lua闭合函数

    function count( ... ) return function( ... ) i = i+ return i end end local func = count(...) print(f ...

  8. Lua function 函数

    Lua支持面向对象,操作符为冒号‘:’.o:foo(x) <==> o.foo(o, x). Lua程序可以调用C语言或者Lua实现的函数.Lua基础库中的所有函数都是用C实现的.但这些细 ...

  9. lua API函数大全

    Lua5.1中的API函数 lua_State* luaL_newstate()Lua脚本的编译执行是相互独立的,在不同的线程上执行.通过luaL_newstate()函数可以申请一个虚拟机,返回指针 ...

随机推荐

  1. 谷歌算法研究员:我为什么钟爱PyTorch?

    老铁们好!我是一名前谷歌的算法研究员,处理深度学习相关项目已有三年经验,接下来会在平台上给大家分享一些深度学习,计算机视觉和统计机器学习的心得体会,当然了内推简历一定是收的.这篇文章,不想说太多学术的 ...

  2. underscore.js源码解析(一)

    一直想针对一个框架的源码好好的学习一下编程思想和技巧,提高一下自己的水平,但是看过一些框架的源码,都感觉看的莫名其妙,看不太懂,最后找到这个underscore.js由于这个比较简短,一千多行,而且读 ...

  3. maybe i have no answer

    怎么说呢,我从小学开始到高中,大学.我觉得老师对大家都是一样的,虽然我因为父母的原因可能和老师接触比较多,但是学业上其实没什么帮助的. 我更希望老师能给我人生道路上的指点,虽然自己的道路确实是自己走出 ...

  4. JAVA面对对象(一)——封装

    1.封装思想:将对象的属性和行为封装起来的载体是类,类通常对客户隐藏其实现的细节 2.封装就是将属性私有化(private),并提供公共的方法(public)访问私有属性 3.通过封装,实现对属性数据 ...

  5. 从零开始学Kotlin-类的继承(6)

    从零开始学Kotlin基础篇系列文章 Kotlin中的超类Any Kotlin 中所有类都继承超类 Any 类 class demo6 //默认继承超类Any class demo6 : Any() ...

  6. 使用Samba服务程序,让linux系统之间共享文件

    yum  install -y   cifs-utils mkdir  /database    创建挂载目录 在root家目录创建认证文件(依次为SMB用户名.SMB用户密码.SMB共享域)   v ...

  7. linux 开机直接进入命令行

    一.图形界面和命令行切换 linux系统在启动图形化界面后,可以在图形界面和命令行之间来回切换,linux提供了6个命令行终端(terminal或Console),分别为tty1——tty6,使用Ct ...

  8. require.js text 插件使用

    相比于使用script构建DOM结构,使用HTML标签来构建html是一个很好的方式.然而, 并没有很好的方式可以在js文件中嵌入 HTML .最好的方式是使用 HTML字符串, 但这很难管理,尤其实 ...

  9. UML时序图学习

    定义 时序图主要用于展示对象之间交互的顺序. 时序图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一 ...

  10. BZOJ5418 NOI2018屠龙勇士(excrt)

    显然multiset求出每次用哪把剑.注意到除了p=1的情况,其他数据都保证了ai<pi,于是先特判一下p=1.比较坑的是还可能存在ai=pi,稍微考虑一下. 剩下的部分即解bix≡ai(mod ...