我需要从C调用Lua函数,只要该函数是全局函数,就可以在全局表中找到它,但是如果将其声明为局部,如何将地址压入堆栈以进行调用?
function MyGlobal()
print("Global")
end
local function MyLocalGlobal()
print("Local")
end
从C调用MyGlobal()
没问题,它可以正常工作。我在全局表中查找该函数。
但是如何从C调用MyLocalGlobal()
?它不在全局表中,但是它在哪里以及如何推送地址?
我正在使用Lua 5.3.4。
答案 0 :(得分:2)
MyLocalGlobal()
函数并不是真正的全局函数。匿名函数是本地函数,它表示整个已加载代码块。
致电lua_load/lua_loadstring
时实际上发生了什么:
return function(...) -- implicit functionality outside of code to be loaded
-- your file starts here --
function MyGlobal()
print("Global")
end
local function MyLocalGlobal()
print("Local")
end
-- file ends here --
end -- implicit functionality outside of code to be loaded
稍后可以使用调试工具(通过'debug'库)获得MyLocalGlobal
,或者应该在该源文件的末尾显式返回所需的接口,并在本机端获取/读取该接口在您加载/执行块之后。