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