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

时间:2018-08-19 20:10:24

标签: c++ lua

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

卢阿:

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?
}

1 个答案:

答案 0 :(得分:1)

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

您的原始代码不起作用的原因是,顾名思义,lua_tocfunction仅适用于C函数。它需要一个已经暴露给Lua的C函数,然后重新提取指向它的函数指针。由于本机Lua函数没有相应的C函数,因此lua_tocfunction将无法使用它。

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

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