【Cocos2d-x lua篇006】Lua调用C++的函数
来源:互联网 发布:ubuntu启动anaconda 编辑:程序博客网 时间:2024/05/25 23:58
1. Lua调用C++的函数
Lua要调用C++的函数还是蛮方便的,首先,我们来创建一个c++函数先:
- public:
- static int getNumber(int num);
- int HelloLua::getNumber( int num ) {
- CCLOG("getNumber num = %d", num);
- return num + 1;
- }
类的什么的,我就忽略了,直接上函数。
这是一个很简单的函数,给出一个值,返回一个+1后的值。
现在,我们想在Lua中调用这个函数,得多写一个函数。
- public:
- static int cpp_GetNumber(lua_State* pL);
- int HelloLua::cpp_GetNumber( lua_State* pL ) {
- /* 从栈顶中取一个值 */
- int num = (int)lua_tonumber(pL, 1);
- /* 调用getNumber函数,将返回值入栈 */
- lua_pushnumber(pL, getNumber(num));
- /* 返回值个数,getNumber只有一个返回值,所以返回1 */
- return 1;
- }
这是怎么回事呢?我们很清楚,Lua和C++只能通过堆栈通信,所以Lua是不可能直接调用getNumber函数的,所以我们建立一个cpp_GetNumber函数作为中介。
cpp_GetNumber函数有一个lua_State* pL参数,有了这个参数,c++就能从Lua的堆栈中取值了,剩下的都很简单,不想过多的解释...
还是解释一下吧。
1) 首先,Lua脚本里会调用cpp_GetNumber函数,至于为什么能调用,一回解释,我知道旁白一定会问的。(旁白:有种无力吐槽的感觉。。。)
2) 当cpp_GetNumber被调用时,一切又回到C++对Lua的操作了,栈顶里会存放函数所需要的参数,取出来用就可以的。
3) Lua调用cpp_GetNumber之后,需要一个结果,当然,这个结果同样只能存放在栈里,所以理所当然地要把getNumber的结果入栈。
4) 最后,cpp_GetNumber return了一个值,这个值不是函数的执行结果,而是getNumber需要返回值的个数(Lua支持多个返回值的函数)
旁白,你明白了么?
好,既然大家都明白了,我就不多说了~
- 【Cocos2d-x lua篇006】Lua调用C++的函数
- 【Cocos2d-x lua篇005】C++调用Lua的函数
- 【木头Cocos2d-x 030】Lua篇(第05章):C++调用Lua的函数
- 【木头Cocos2d-x 031】Lua篇(第06章):Lua调用C++的函数
- 【木头Cocos2d-x 031】Lua篇(第06章):Lua调用C++的函数
- 【木头Cocos2d-x 030】Lua篇(第05章):C++调用Lua的函数
- 【木头Cocos2d-x 030】Lua篇(第05章):C++调用Lua的函数
- 【木头Cocos2d-x 031】Lua篇(第06章):Lua调用C++的函数
- 【木头Cocos2d-x 030】Lua篇(第05章):C++调用Lua的函数
- 【木头Cocos2d-x 031】Lua篇(第06章):Lua调用C++的函数
- 【木头Cocos2d-x 031】Lua篇(第06章):Lua调用C++的函数
- cocos2d-x下c++调用lua函数
- cocos2d-x lua调用c++函数
- cocos2d-x bindings-generator(lua调用c++)
- cocos2d-x bindings-generator(lua调用c++)
- [lua]C调用lua函数
- Cocos2d-x lua的随机函数
- cocos2d-x lua 调用ccbi
- UITabBarController+UINavigationController多层嵌套
- HDU 1029 Ignatius and the Princess IV 【求众数】
- 【Cocos2d-x lua篇005】C++调用Lua的函数
- 在Ubuntu下怎么截图
- Linux系统调用
- 【Cocos2d-x lua篇006】Lua调用C++的函数
- UIWebView加载Loading...两种方法
- 把内容写入指定目录指定文件的java文件工具类,支持日期格式目录名的生成
- UIView详解
- EOJ 1255
- oracle保存小数点前为"0"的问题
- poj2449 Remmarguts' Date
- 面试时,如果面试官问你怎样看待加班,应该怎么回答?
- 关于Sqlite数据库Update语句的一点介绍