gpt4 book ai didi

c++ - 如何在C++中获取lua函数作为参数然后调用它

转载 作者:行者123 更新时间:2023-11-28 04:34:22 31 4
gpt4 key购买 nike

我在 C++ 中实现 lua api (5.1) 时遇到问题,无法将 lua 函数作为参数传递给从 lua 调用的 c++ 函数。示例(从 C++ 调用 Main 函数):

路亚:

function Main()
HookEntityFunction("player", 1, PlayerSpawn); -- << is this normal?
end

function PlayerSpawn()

end

C++:

int HookEntityFunction(lua_State *L)
{
lua_CFunction F = lua_tocfunction(L, 3); -- << how to call it?
}

最佳答案

您在问题中发布的答案不正确,或者至少是愚蠢的。

您的原始代码不起作用的原因是 lua_tocfunction 顾名思义,仅适用于 C 函数。它接受一个暴露给 Lua 的 C 函数,并重新提取指向它的函数指针。由于原生 Lua 函数没有相应的 C 函数,lua_tocfunction 将无法使用它。

您提出的解决方案依赖于将传入函数存储为全局函数,并根据其名称获取它。这将它放在堆栈上。但是在您的第一个示例中,它已经在堆栈中了!这是从 C 函数处理 Lua 对象的正确、惯用的方法:通过操纵堆栈。

因此,真正解决您问题的方法是,获取您的第一个 Lua 片段,然后执行 lua_call(L, 0, 0)。不需要全局变量或指针或任何东西。

关于c++ - 如何在C++中获取lua函数作为参数然后调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51921443/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com