>我需要从 C 调用一个 Lua 函数,只要该函数是全局的,我就可以在全局表中找到它,但如果它被声明为本地,我该如何推送堆栈上的地址来调用它?
function MyGlobal()
print("Global")
end
local function MyLocalGlobal()
print("Local")
end
从 C 调用MyGlobal()
不是问题,它工作正常。我在全局表中查找函数。
但是如何从 C 调用MyLocalGlobal()
?它不在全局表中,但它在哪里以及如何推送地址?
我正在使用Lua 5.3.4。
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
您可以稍后使用调试工具(通过"调试"库(获取MyLocalGlobal
,或者您应该在该源文件的末尾显式返回所需的接口,并在加载/执行块后立即在本机端获取/读取接口。