6

私はグーグルのハイとローを持っていて、例を見つけましたが、どれもうまくいかないようです(Lua 5.2)。

Luaに簡単な機能があります

function onData ( data )
  print ( data )
end

onData私はC++から呼び出したいので、これを試しました:

// 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()ご覧のとおり、関数を使用できるように、スクリプトをコルーチンとして開始しています。Lと状態の両方で関数を探してみましたCO

4

1 に答える 1

4

luaL_loadbufferスクリプトをロードしますが、実行しません。onDataスクリプトの実行時にのみ定義されます。

luaL_dostringの代わりに電話してみてくださいluaL_loadbuffer

lua_pcall(CO,0,0,0)または前に追加しlua_getglobalます。

lua_resume(CO,NULL,1)また、に渡す必要がありdataますonData

于 2013-12-10T12:57:49.943 に答える