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

Я встраиваю Lua в приложение C/C++. Там какой-либо путь состоит в том, чтобы вызвать функцию Lua от C/C++, не выполняя весь сценарий сначала?

Я попытался делать это:

//call lua script from C/C++ program
luaL_loadfile(L,"hello.lua");

//call lua function from C/C++ program
lua_getglobal(L,"bar");
lua_call(L,0,0);

Но это дает мне это:

PANIC: unprotected error in call to Lua API (attempt to call a nil value)

Я могу только назвать панель (), когда я делаю это:

//call lua script from C/C++ program
luaL_dofile(L,"hello.lua");  //this executes the script once, which I don't like

//call lua function from C/C++ program
lua_getglobal(L,"bar");
lua_call(L,0,0);

Но это дает мне это:

hello
stackoverflow!!

Я желаю это:

stackoverflow!

Это - мой lua сценарий:

print("hello");

function bar()
 print("stackoverflow!");
end
7
задан Person 27 February 2010 в 03:26
поделиться

2 ответа

Как только что обсуждалось в #lua на freenode, luaL_loadfile просто компилирует файл в вызываемый фрагмент, в этот момент ни один код внутри файла не запускался (который включает определения функций) как таковой, чтобы получить определение of bar для выполнения фрагмента должен быть вызван (что и делает luaL_dofile).

13
ответ дан 6 December 2019 в 15:21
поделиться

Обнаружено, что для вызова функции необходимо запустить сценарий.

1
ответ дан 6 December 2019 в 15:21
поделиться