如何从 C/C++ 访问本地变量或在 lua 脚本中调用本地函数?

use*_*507 2 c c++ lua

如果我定义一个“本地”函数,如下所示:

本地函数 Dispatch(archive) coroutine.resume(yelder) end

...我想从 C++ 调用这个函数,我认为我不能使用 lua_getglobal() 调用:

m_pThreadState = lua_newthread(m_MasterLuaState);
//Load/define the above "Dispatch" routine local to this thread.
luaL_loadbuffer(m_pThreadState, m_ScriptBody, strlen(m_ScriptBody),"Console");
lua_getglobal(m_pThreadState, "Dispatch"); //UH-OH!! PROBLEM HERE!!
lua_pcall(m_pThreadState, 1, 0, 0);
Run Code Online (Sandbox Code Playgroud)

那么如何在调用准备中指定/推送本地函数“Dispatch”?同样,我假设我不能使用 lua_getglobal() 调用,因为“Dispatch”函数被定义为 m_pThreadState 的“本地”。我该怎么办?

W.B*_*.B. 5

您不能从 C 访问局部变量(除了调试 API,但我认为这不是您想要的)。

局部变量(和函数,因为它们是变量)是它们的本质——局部的,即只能从它们周围的范围内访问。

所以你有两个选择:

  • 创建全局变量
  • 从 Lua 调用 C 函数并将本地函数作为参数传递。然后,您将在堆栈上拥有该函数,并且可以从 C(从 C 函数内部)调用它。现在这样做没有什么意义,我只是指出它可以完成的方式。