Вызов функции Lua из переполнения стека

У меня есть Google High и Low и я нашел примеры, но ни один из них, кажется, не работает (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 состояния.

5

Решение

luaL_loadbuffer загружает скрипт, но не запускает его. onData будет определяться только при запуске скрипта.

Попробуйте позвонить luaL_dostring вместо luaL_loadbuffer,

Или добавить lua_pcall(CO,0,0,0) до lua_getglobal,

Кроме того, вам нужно lua_resume(CO,NULL,1) пройти data в onData,

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector