gpt4 book ai didi

lua - 从 C 调用 Lua

转载 作者:行者123 更新时间:2023-12-04 22:26:03 26 4
gpt4 key购买 nike

我正在尝试从 C 调用用户定义的 Lua 函数。我已经看到一些关于此的讨论,解决方案似乎很清楚。我需要用 luaL_ref() 获取函数的索引,并保存返回的索引以备后用。

在我的例子中,我用 luaL_ref 保存了值,现在我的 C 代码需要调用用 luaL_ref 保存的 Lua 函数。为此,我按如下方式使用 lua_rawgeti:

lua_rawgeti(l, LUA_REGISTRYINDEX, fIndex);

这会导致 lua_rawgeti 崩溃。

我使用的 fIndex 是我从 luaL_ref 收到的值,所以我不确定这里发生了什么。

编辑:

我正在运行一个 Lua 脚本,如下所示:

function errorFunc()
print("Error")
end

function savedFunc()
print("Saved")
end

mylib.save(savedFunc, errorFunc)

我已经定义了我自己的 Lua 库“mylib”,带有一个 C 函数:

static int save(lua_State *L) 
{
int cIdx = myCIndex = luaL_ref(L, LUA_REGISTRYINDEX);
int eIdx = luaL_ref(L, LUA_REGISTRYINDEX);

我将 cIdx 和 eIdx 保存到稍后的某个时间点,当我收到一些外部事件时,我想调用在我的 Lua 脚本中设置为参数的函数之一。在这里,(在同一个线程上,使用相同的 lua_State*),我调用:

lua_rawgeti(L, LUA_REGISTRYINDEX, myCIndex);

导致崩溃的原因。

最佳答案

我的第一个建议是在完全不将函数存储在 C 中的情况下让它工作。只需将您的函数分配给 Lua 中的全局变量,然后在 C 中使用 Lua 状态 (L) 获取全局变量、推送参数、调用函数并使用结果。一旦它开始工作,您就掌握了基础知识并且知道您的功能正在工作,您可以更改使用注册表的功能的方式。祝你好运!

关于lua - 从 C 调用 Lua,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8557304/

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