c++ - 如何在 C++ 中获取 lua 函数作为参数然后调用它
问题描述
我在 C++ 中实现 lua api (5.1) 并遇到问题,无法在从 lua 调用的 c++ 函数中将 lua 函数作为参数传递。示例(从 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?
}
解决方案
您在问题中发布的答案是不正确的,或者至少是愚蠢的。
您的原始代码不起作用的原因lua_tocfunction
是,顾名思义,仅适用于 C 函数。它接受一个暴露给 Lua 的 C 函数,并重新提取指向它的函数指针。由于原生 Lua 函数没有对应的 C 函数,lua_tocfunction
因此无法使用它。
您提出的解决方案依赖于存储为全局的传入函数,并根据其名称获取它。这把它放在堆栈上。但是在您的第一个示例中,它已经在堆栈上!这是处理来自 C 函数的 Lua 对象的正确、惯用的方法:通过操作堆栈。
因此,解决问题的真正方法是,获取您的第一个 Lua 代码段,然后执行lua_call(L, 0, 0)
. 不需要全局变量或指针或任何东西。
推荐阅读
- android - 当我的应用程序打开时永远做一个任务 - 怎么做?
- javascript - 如果 HTML 标签不是兄弟元素或父元素,如何定位和重命名它?
- php - 是否有任何功能/代码可以防止在数据库中保存重复值?
- python - 使用索引和子索引将值分配给 numpy 数组
- javascript - 单击注册页面按钮时没有响应
- python - 如何最好地为我的树类编写一个 __str__ 方法?
- maven - 如何让 Maven 只做我的自定义配置文件?
- python - 如何获取带有生成的 sessionID 参数的页面?
- node.js - 使用 PostgreSQL 在 NodeJS 中插入多查询
- python - 找到两条相交线之间的等分平面