c++ - 从 C++ 调用 Lua 函数

标签 c++ lua lua-5.2 c++builder-xe3

我在谷歌上搜索了高低并找到了示例,但它们似乎都不起作用(Lua 5.2)。

我在 Lua 中有一个简单的函数

function onData ( data )
  print ( data )
end

我想从 C++ 调用 onData 并试过这个:

// Create new Lua state
L = luaL_newstate();

// Load all Lua libraries
luaL_openlibs(L);

// Create co-routine
CO = lua_newthread(L);

// Load and compile script
AnsiString script(Frame->Script_Edit->Text);
if (luaL_loadbuffer(CO,script.c_str(),script.Length(),AnsiString(Name).c_str()) == LUA_OK) {
  Compiled = true;
} else {
  cs_error(CO, "Compiler error: ");    // Print compiler error
  Compiled = false;
}


// Script compiled and ready?
if (Compiled == true) {
  lua_getglobal(CO, "onData");    // <-------- Doesn't find the function
  if( !lua_isfunction(CO,-1)) {
    lua_pop(CO,1);
    return;
  }
  lua_pushlstring(CO,data,len);
  lua_resume(CO,NULL,0)
}

如您所见,我将脚本作为协同例程启动,因此我可以在其上使用 lua_yield() 函数。我试图在 LCO 状态下寻找函数。

最佳答案

luaL_loadbuffer 加载脚本但不运行它。 onData 只会在脚本运行时定义。

尝试调用 luaL_dostring 而不是 luaL_loadbuffer

或者在lua_getglobal之前添加lua_pcall(CO,0,0,0)

此外,你需要lua_resume(CO,NULL,1)data传递给onData

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

相关文章:

c++ - 如何使用 std::find 作为类 vector ?

C++ 将输入分离到各种变量中

java - 如何解析xls文件? (已知语言: Python, Java、Lua)

c# - 从 Lua 5.1 移植到 5.2

c++ - 从 C++ 调用 Lua 5.2 函数

windows - 在 Windows 中构建 Lua 5.2.2

c++ - decltype(auto) 有哪些用途?

c++ - 覆盖虚函数返回类型不同且不是协变的

c++ - 使用 physfs 从 zip 内部使用 Lua "require"

javascript - Nodejs 中使用 Lua 脚本的 Redis mget