如何将全局值从 C 传递到 LUA



最近我打算在我的 C 应用程序中嵌入 LUA,我现在要做的是我有一个值 (Session_ID) 我想从 C 函数传递到 LUA 脚本,以便 LUA 脚本可以使用它来调用 C 中的函数。

我在 C 中加载 LUA 脚本并运行它(使用 lua_pcall)没有问题,从 LUA 内部调用 C 函数也没有问题,我当前的问题是来回传递全局变量。

例如:

在 C 端(测试.c):

session_id = 1;
luabc_sz = rlen;
result = lua_load(L, luaByteCodeReader, file, "script", "bt");      
if( lua_pcall(L, 0, 0, 0) != 0 )

其中 file 是包含 LUA 脚本(script.lua)的数组。

在 Lua 侧脚本.lua):

print "Start"
for i=1,10 do
  print(i, **session_id**)
end
print "End"

"打印"被我自己的功能覆盖,我想把它session_id。所以完整的场景是我在 c 函数中有session_id,我想将其传递给 LUA 脚本,该脚本稍后将使用它来调用用 C 编写的打印函数。

对此:)有任何帮助吗?

只需将session_id推送到堆栈上,并在pcall时将其传递到脚本中。像这样:

// ...
result = lua_load(L, luaByteCodeReader, file, "script", "bt");
lua_pushinteger(L, session_id);
if( lua_pcall(L, 1, 0, 0) != 0 )
// ...

让您的脚本访问它,如下所示:

local session_id = ...
print "Start"
for i = 1, 10 do
  print(i, session_id)
end
print "End"

另一种选择,虽然不那么吸引人,是为lua的全球环境添加session_id

// ...
result = lua_load(L, luaByteCodeReader, file, "script", "bt");
lua_pushinteger(L, session_id);
lua_setglobal(L, "session_id");
if( lua_pcall(L, 0, 0, 0) != 0 )
// rest of your code

script.lua现在可以通过 session_id 访问该会话值。

相关内容

  • 没有找到相关文章

最新更新