#c #lua #lua-api
#c #lua #lua-api
Вопрос:
У меня есть Lua, встроенный в хост C. И у меня есть несколько функций C, зарегистрированных в Lua.
Есть ли какой-либо способ, которым, когда я вызываю Lua, а затем Lua вызывает мою функцию C, значение может быть передано из «внешнего» кода C во «внутренний» код C?
Конкретная проблема заключается в том, что у меня есть указатель HTTP-запроса, к которому мне нужно получить доступ из функции обратного вызова, и я бы предпочел не хранить его в глобальной переменной из-за того, что это потенциально многопоточный код.
Ответ №1:
Когда ваш «внешний» C-код вызывает Lua, передайте указатель HTTP-запроса в качестве легкого аргумента userdata. Внутри Lua обрабатывайте его как непрозрачное значение, которое вы снова передаете «внутреннему» обратному вызову C в качестве аргумента. Затем попросите ваш «внутренний» C-код просто прочитать его и привести обратно к нужному типу.
Кстати, Lua сам по себе не является потокобезопасным, поэтому будьте осторожны с этим, если ваше приложение многопоточное.