如何在C++中将lua函数作为参数传递并调用它

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

Lua:

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?
}
点赞
用户787480
用户787480

你在问题中提供的答案是不正确的,或者至少是荒谬的。

你原来的代码无法工作的原因是 lua_tocfunction 仅适用于 C 函数,正如其名称所示。它接受一个已暴露给 Lua 的 C 函数,并重新提取其函数指针。由于本地 Lua 函数没有相应的 C 函数,因此 lua_tocfunction 不能与其一起使用。

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

因此,你问题的真正解决方案是,采用你的第一个 Lua 片段,并仅执行 lua_call(L, 0, 0)。不需要全局变量、指针或任何其他东西。

2018-08-19 21:00:55