【问题标题】:Manipulating Lua variables from C从 C 中操作 Lua 变量
【发布时间】:2012-05-25 09:33:03
【问题描述】:

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

 foo1, bar = t.colorHistogram(bar) 

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

【问题讨论】:

  • 是的,我知道。这就是为什么我说不是正在修改变量所在的内存,这就是为什么我尝试修改堆栈本身的值。它没有用。不过感谢您的回复:)

标签: lua inline


【解决方案1】:

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

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

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

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

【讨论】:

  • 对我来说,解决这个问题的一个简单方法是让 Lua 从堆栈中读取数据。那可能吗?如果 Lua 将我传递给 C 的值的副本放在“堆栈”上,那么 Lua 也应该可以从该堆栈中读取值。
  • @user1378064:Lua 不是这样工作的。 Lua 不会将参数读回变量中。所以除非你在谈论改变 Lua(我强烈反对它),那是不会发生的。 Lua 语言的设计目的是在不显式使用= 符号的情况下无法更改变量的内容。这就是为什么 Lua 中没有 ++-- 运算符的原因。搞砸了,后果自负。
  • 好的,那么有没有办法用 = 符号更改变量?方法无关紧要。我只想将一个参数传递给 C,让 C 对其进行修改,然后在 Lua 中使用该修改后的值。有没有可能发生这种情况?
  • @user1378064:我解释了如何使用等号:将变量设置为函数的返回值之一。如果您要问如何从函数中 return 值,那是另一个问题。在这里提问之前,您应该在各种 Lua 资源中查找。
猜你喜欢
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 2011-04-11
  • 2013-07-08
  • 1970-01-01
  • 2012-10-28
相关资源
最近更新 更多