Я пытаюсь изменить переменную Lua в C. Я передаю пользовательские данные Lua функции C, а функция C использует их и изменяет. Я хочу, чтобы эти значения были изменены и в Lua. Вот мой код -Манипулирование переменных Lua из C
Lua -
C -
Здесь я не знаю, что надеть. Я прочитал, как две обменные данные. Lua создает стек, в который он вставляет аргументы, и C обращается к этим аргументам с помощью lua_Object. Так
int foo = lua_tonumber(L,1);
foo = 5;
будет инициализировать Foo как 0 и установить его до 5. Тем не менее, оператор печати в Lua по-прежнему отображается 0 в качестве значения, поскольку это не память, где переменная «бар» в Lua хранится то есть изменение. Я хотел знать, есть ли способ изменить память. Я также попытался заменить данные в стеке на модифицированное значение. Это тоже не работает.
Любая помощь приветствуется. Спасибо.
EDIT **
Я полагаю, что было не очень понятно, на мой первоначальный вопрос. Я пробовал. В любом случае, я постараюсь лучше -
Что я в основном хочу сделать, это передать значение inline C, иметь C изменить это значение и иметь возможность читать его как измененное в Lua. Я не слишком забочусь о том, чтобы изменить эту конкретную ячейку памяти или переменную. Пока есть какой-то способ для меня прочитать значение, которое C изменено в Lua, я возьму это.
foo1, bar = t.colorHistogram(bar)
не будет работать, потому что «т» является вызовом функции Lua и гистограммой является встраиваемой функцией C в этой функции Lua. Если я передаю bar на t.colorHistogram, мне понадобится функция Lua «t», чтобы иметь возможность возвращать бар, что означало бы, что мне понадобится функция Lua «t», чтобы прочитать бар как измененный. Вот что я не знаю, как это сделать. Спасибо за ваш ответ. END EDIT
нильполугруппы, булевы, числа и строки передаются _by value_ в Lua, так насколько я вижу, вы эффективно манипулируете копией в стеке. –
Да, я это знаю. Вот почему я сказал, что это не память, где находится переменная, которая изменяется, и поэтому я попытался изменить значение самого стека. Это не сработало. Спасибо за ваш ответ, хотя :) – maverick1989