Lua C: Как мне использовать исходный код Lua для создания интерпретатора Lua, который будет выполнять заданные блоки кода Lua?

Хотелось бы подробного объяснения.

Как мне использовать исходный код Lua для создания интерпретатора Lua, который будет выполнять заданные блоки кода Lua? Блоки кода Lua будут отправлены как char.


person Sam H    schedule 24.11.2010    source источник


Ответы (2)


вам нужен вызов lua_load для компиляции блока кода, а затем вызов lua_call для его запуска. В качестве действительно хорошего примера того, как это делается, взгляните на пример, представленный здесь:.

Первым аргументом любой API-функции Lua всегда является состояние интерпретатора, которое является возвращаемым значением lua_open().

В примере фактически используется luaL_loadbuffer, который оборачивает вызов lua_load, чтобы немного упростить компиляцию строки c. вы можете прочитать, как его использовать, в главе справочного руководства, посвященной вспомогательному Библиотека. Это оставляет lua чанк в верхней части стека lua, который затем может быть вызван с помощью lua_call, но в примере используется lua_pcall, который обеспечивает отлов ошибок. поскольку чанк, который вы только что скомпилировали, не принимает никаких аргументов (это чанк, а не функция) и не имеет никакого возвращаемого значения, которое вас могло бы заинтересовать, и вы хотите увидеть ошибку точно такой, какой она была создана, все аргументы, кроме первого (который всегда является состоянием интерпретатора lua), могут быть нулевыми.

person SingleNegationElimination    schedule 24.11.2010
comment
Как мне удовлетворить аргументы в этой функции? - person Sam H; 25.11.2010
comment
См. мой ответ на другой вопрос: stackoverflow .com/questions/4272231/how-does-lua-load-work/ - person lhf; 25.11.2010

http://www.lua.org/manual/2.1/subsection3_7_6.html

http://lua-users.org/lists/lua-l/2006-10/msg00405.html пример

http://www.debian-administration.org/articles/264 c++, того же типа предмет

Это расскажет вам, как вызывать Lua из C.

person johnny    schedule 24.11.2010