Lua - C++ 集成:从 C++ 调用表中的函数
Posted
技术标签:
【中文标题】Lua - C++ 集成:从 C++ 调用表中的函数【英文标题】:Lua - C++ Integration: Calling function in table from C++ 【发布时间】:2016-08-04 11:58:17 【问题描述】:我不是 Lua 专家,但我已经红色了一些文章来了解它是如何工作的。但是,我在调用属于 C++ 表的 lua 函数时遇到问题。
在下面描述的示例中,我试图从代码中调用 foo:bar。通话成功。但是参数“a”是 nil(返回值是正确的 - 当我将返回值更改为例如 10 时,它会显示正确的结果)
我在将函数参数推送到脚本时是否遗漏了什么?
lua_State* state = LuaIntegration->GetLuaState();
lua_getglobal(state, "foo");
if(lua_istable(state, lua_gettop(state)))
lua_getfield(state, -1, "bar");
if(lua_isfunction(state, lua_gettop(state)))
lua_pushinteger(state, 0);
if (lua_pcall(state, 1, 1, 0) != 0)
ErrorMessage = lua_tostring(state, -1);
ReturnValue = lua_tointeger(state, -1);
在lua中调用函数:
foo = base_foo:new()
function foo:new(o)
o = o or
setmetatable(o, self)
self.__index = self
return o
end
function foo:bar(a)
if a==10 then
return a
end
return 0
end
【问题讨论】:
【参考方案1】:您忘记了 C++ 调用中的糖。
如果您阅读lua manual 的Function Calls 部分,您会看到
调用
v:name(args)
是v.name(v,args)
的语法糖,但v
只计算一次。
这意味着base_foo:new()
真的只是base_foo.new(base_foo)
。
这就是您在 C++ 调用中缺少的内容。
调用时需要将表作为第一个参数传递给函数。
【讨论】:
嗯,有道理。谢谢以上是关于Lua - C++ 集成:从 C++ 调用表中的函数的主要内容,如果未能解决你的问题,请参考以下文章
Cocos2dLua3.17.2集成FairyGUI之 lua绑定 getGroup() 调用问题
嵌入在 C++ socket.http 中的 LUA [错误:尝试调用 nil 值]
lua 与 c++或者c 交互的底层原理谁能解释一下?最最底层的,为啥它们调用C或者C++的函数?
有没有办法将 lua 函数从 C++ 更改为 nil,例如 changefunction(thefunction) 并且在调用时变为 nil