2012-05-17 3 views
0

Я пытаюсь изменить переменную 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

+0

нильполугруппы, булевы, числа и строки передаются _by value_ в Lua, так насколько я вижу, вы эффективно манипулируете копией в стеке. –

+0

Да, я это знаю. Вот почему я сказал, что это не память, где находится переменная, которая изменяется, и поэтому я попытался изменить значение самого стека. Это не сработало. Спасибо за ваш ответ, хотя :) – maverick1989

ответ

2

Переменные не передаются в функции; значения передаются в функции. Значение 0 является значением. local bar = 0; t.colorHistogram(bar); функционально ничем не отличается от t.colorHistogram(0).

Вы не можете манипулировать содержимым переменной параметра из функции Lua, так как функции Lua не передаются переменными. Они передают содержимое переменной.

Обратите внимание, что не имеет значения, является ли это C-функцией или функцией Lua; это как раз то, как работает параметр параметра Lua. Параметры - это входы только; если вы хотите изменить «переменную», то она либо должна быть глобальной или вывод, что вызывающий абонент сохраняет в этой переменной:

bar = 0 
foo1, bar = t.colorHistogram(bar) 
+0

Простой способ решить это, для меня, будет иметь возможность для Lua читать из стека. Это возможно?Если Lua помещает копии значений, которые я передаю на C в «стек», должно быть возможно, чтобы Lua также считывал значения из этого стека. – maverick1989

+0

@ user1378064: Lua не работает таким образом. Lua не считывает параметры обратно в переменные. Поэтому, если вы не говорите о * изменении * Lua (и я бы настоятельно советовал против этого), этого не произойдет. Язык Lua был разработан, чтобы сделать невозможным изменение содержимого переменных без явного использования знака '='. Вот почему в Lua нет оператора '++' или '--'. Вверните это с вашей опасностью. –

+0

Хорошо, тогда есть способ изменить переменную WITH an = sign? Метод несуществен. Я просто хочу передать аргумент C, C изменить его, а затем использовать это измененное значение в Lua. Не может ли это случиться? – maverick1989

Смежные вопросы