【问题标题】:How to retrieve a value in stack in lua script?如何在lua脚本中检索堆栈中的值?
【发布时间】:2013-10-25 09:29:17
【问题描述】:

我在我的 C 应用程序中嵌入了 lua。 我正在从 C 端将一个变量推入堆栈,并希望在 lua 脚本本身中检索它。

我可以用什么来获取脚本文件中堆栈中的推送值?

C 代码:

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

在脚本中我想检索 session_id

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

【问题讨论】:

  • 我不擅长使用 Lua API,但您不应该调用 luaL_setglobal() 以使用变量名访问变量吗? (或者这被认为是“邪恶的”?)
  • 当从 C 传回时,session_id 值包含在多参数 ...... 中的第一个值)中。上述分配中的左侧应该被选中第一个 multivar-arg 并将其存储到 session_id.
  • 这个问题与您之前的问题stackoverflow.com/questions/19553060/… 有何不同?
  • 没有什么不同,我在检索脚本中的值时遇到了问题,但现在可以正常工作了,谢谢。

标签: c lua


【解决方案1】:

问题是您将参数传递给脚本加载,根据您的情况,您可以设置一个全局值或调用一个函数。

例如,假设您的脚本中有一个on_init 函数:

function on_init(session_id)
   ...do something...
end

您可以在执行过程中加载脚本,然后在堆栈顶部获取on_init 函数并使用您的参数调用它:

lua_getglobal(L, "on_init");
lua_pushnumber(L, session_id);
/* call the function with 1 arguments, return 0 result */
lua_call(L, 1, 0);

而且它更干净一点。

【讨论】:

    猜你喜欢
    • 2019-08-28
    • 2010-10-08
    • 2023-02-23
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 2012-08-06
    • 2021-05-31
    • 2023-04-02
    相关资源
    最近更新 更多