Могу ли я передать значение с моего хоста C через Lua функции обратного вызова C?

#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 сам по себе не является потокобезопасным, поэтому будьте осторожны с этим, если ваше приложение многопоточное.