从C操纵Lua变量

时间:2012-05-17 19:04:39

标签: lua inline

我正在尝试修改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。结束编辑

1 个答案:

答案 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)