我正在尝试修改C中的Lua变量。我将Lua userdata传递给C函数,C函数使用它们并更改它们。我想在Lua中改变这些值。这是我的代码 -
Lua -
t = require 'coroutines'
function foo()
bar = 0
foo1 = t.colorHistogram(bar)
print(bar)
end
C -
这里我不知道该放什么。我读了两个如何交换数据。 Lua创建了一个堆栈,它将参数推入,C使用lua_Object访问这些参数。所以
int foo = lua_tonumber(L,1);
foo = 5;
将foo初始化为0并将其设置为5.但是,Lua中的print语句仍然显示0作为值,因为它不是存储Lua中变量“bar”的内存,而该内存正在被修改。我想知道是否有办法修改内存。我还尝试用修改后的值替换堆栈上的数据。这也不起作用。
感谢任何帮助。谢谢。
编辑**
我想我原来的问题并不是很清楚。我试着抱歉。无论如何,我会更好 -
我基本上想要做的是将值传递给内联C,让C修改该值并能够在Lua中将其读取为已修改。我不太在意修改特定的内存位置或变量。只要有一些方法可以让我读到Lu在Lu中修改的值,我就会接受。
foo1, bar = t.colorHistogram(bar)
不起作用,因为“t”是一个lua函数调用,而colorHistogram是Lua函数中的内联C函数。如果我将bar传递给t.colorHistogram,我需要Lua函数“t”才能返回bar,这意味着我需要Lua函数“t”来读取修改后的bar。这就是我不知道该怎么办。谢谢你的回复btw。结束编辑
答案 0 :(得分:2)
变量不会传递给函数; values 传递给函数。数字0
是一个值。 local bar = 0; t.colorHistogram(bar);
在功能上与t.colorHistogram(0)
没有区别。
您无法在Lua函数中操作参数变量的内容,因为Lua函数不是传递变量。他们传递了变量的内容。
请注意,无论是C函数还是Lua函数都无关紧要;这就是Lua参数传递的工作原理。参数只是输入 ;如果要修改“变量”,则它必须是调用者存储到该变量中的全局或输出:
bar = 0
foo1, bar = t.colorHistogram(bar)