从 C 语言中操作 Lua 变量。

我正在尝试在 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”的内存。我想知道是否有一种修改内存的方法。我还尝试用修改后的值替换堆栈中的数据。也不起作用。

感谢任何帮助。谢谢。

EDIT**

我想我的原始问题并不是很明确。抱歉。好吧,我会更好地尝试 -

我基本上想做的是将值传递给内联的 C,让 C 修改该值,并能够在 Lua 中以修改后的形式读取它。我不太在乎修改特定的内存位置或变量。只要有一种方法让我在 Lua 中读取 C 修改的值,我就会采取那种方法。

foo1, bar = t.colorHistogram(bar)

不起作用,因为“t”是一个 Lua 函数调用,而 colorHistogram 是该 Lua 函数中的一个内联 C 函数。如果我将 bar 传递给 t.colorHistogram,我需要让 Lua 函数“t”能够返回 bar,这意味着我需要让 Lua 函数“t”读取 bar 为已修改。这是我不确定如何做的。顺便说一下,感谢您的回应。

END EDIT

原文链接 https://stackoverflow.com/questions/10641956

点赞
stackoverflow用户734069
stackoverflow用户734069

变量不会被传递给函数;会被传递给函数。数字 0 是一个值。local bar = 0; t.colorHistogram(bar);t.colorHistogram(0) 本质上没有区别。

你不能从Lua函数内部操作参数变量的内容,因为Lua函数不会将变量传递到函数中,而是传递变量的内容

请注意,无论是C函数还是Lua函数,Lua参数传递的方式都是一样的。参数只是输入;如果你想要修改一个“变量”,那么它必须是一个全局变量或者是一个调用者存储到该变量中的输出:

bar = 0
foo1, bar = t.colorHistogram(bar)
2012-05-17 19:16:20