在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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] |
请发表评论