从C ++调用Lua函数

时间:2013-12-10 12:52:20

标签: 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状态下查找该功能。

1 个答案:

答案 0 :(得分:4)

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

尝试拨打luaL_dostring而不是luaL_loadbuffer

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

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