lua调用c++函数返回值作用
2015/05/28
lua调用c++接口,返回给lua函数的是压入栈的内容,可以有多个返回值。但是c++接口本身也是有返回值的,这个返回值也非常的重要,会决定最后返回到lua函数的值的个数。
(1)c++自定义类
int Test::getMsg(lua_State* L){ lua_pushnumber(L, 100); lua_pushnumber(L, 200); return 2; }
(2)tolua++导出的lua调用的c++接口(部分有修改)
int lua_cocos2dx_custom_Test_getMsg(lua_State* tolua_S) { int argc = 0; Test* cobj = nullptr; bool ok = true; cobj = (PlaceByPoint*)tolua_tousertype(tolua_S,1,0); { int ret = cobj->getMsg(tolua_S); tolua_pushnumber(tolua_S,(lua_Number)ret); return 1; } return 0; }
(3)使用
local p = cc.Test:create() local a, b, c = p:getMsg() print(a, b, c)
结果是:2, nil, nil
按照一般的理解,结果应该是100, 200, 2。所以去查了下资料,发现自己好久没用忘记了,c++接口的返回值也非常的重要。“当需要向 Lua 返回值的时候,C 函数只需要把它们以正序压到堆栈上(第一个返回值最先压入),然后返回这些返回值的个数。在这些返回值之下的,堆栈上的东西都会被 Lua 丢掉。”[1]
参考:
[1]