0

我正在尝试修改 C 中的 Lua 变量。我将 Lua 用户数据传递给 C 函数,C 函数使用它们并更改它们。我也希望在 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 中修改的方式读取它。我不太关心修改那个特定的内存位置或变量。只要有某种方法可以让我读取 C 在 Lua 中修改的值,我就会接受。

 foo1, bar = t.colorHistogram(bar) 

将不起作用,因为“t”是 lua 函数调用,而 colorHistogram 是该 Lua 函数中的内联 C 函数。如果我将 bar 传递给 t.colorHistogram,我需要 Lua 函数“t”才能返回 bar,这意味着我需要 Lua 函数“t”来读取修改后的 bar。这就是我不知道该怎么做。感谢您的回复顺便说一句。结束编辑

4

1 回答 1

2

变量不传递给函数;被传递给函数。数字0是一个值。local bar = 0; t.colorHistogram(bar);在功能上与 没有什么不同t.colorHistogram(0)

您不能在 Lua 函数中操作参数变量的内容,因为 Lua 函数不是传递变量。他们被传递了一个变量的内容

请注意,它是 C 函数还是 Lua 函数都没有关系。这就是 Lua 参数传递的工作原理。参数只是输入;如果要修改“变量”,则它必须是全局变量或调用者存储到该变量中的输出:

bar = 0
foo1, bar = t.colorHistogram(bar)
于 2012-05-17T19:16:20.220 回答