0

CでLua変数を変更しようとしています。LuaユーザーデータをC関数に渡すと、C関数がそれらを使用して変更します。Luaでもこれらの値を変更したいと思います。これが私のコードです-

Lua-

 t = require 'coroutines'
 function foo()
      bar = 0
      foo1 = t.colorHistogram(bar)
      print(bar)
 end

C-

ここに何を置くべきかわかりません。2人がどのようにデータを交換するかを読みました。Luaは、引数をプッシュするスタックを作成し、Cはlua_Objectを使用してそれらの引数にアクセスします。それで

 int foo = lua_tonumber(L,1);
 foo = 5;

fooを0として初期化し、5に設定します。ただし、変更されるのはLuaの変数「bar」が格納されているメモリではないため、Luaのprintステートメントは値として0を表示します。メモリを変更する方法があるかどうか知りたかったのです。また、スタック上のデータを変更された値に置き換えてみました。それも機能しません。

どんな助けでも大歓迎です。ありがとうございました。

編集**

元の質問ではあまり明確ではなかったと思います。申し訳ありませんでした。とにかく、もっと上手くやってみます-

私が基本的にやりたいのは、インラインCに値を渡し、Cにその値を変更させ、Luaで変更されたものとして読み取ることができるようにすることです。その特定のメモリ位置または変数を変更することはあまり気にしません。CがLuaで変更した値を読み取る方法がある限り、それを使用します。

 foo1, bar = t.colorHistogram(bar) 

「t」はlua関数呼び出しであり、colorHistogramはそのLua関数のインラインC関数であるため、機能しません。バーをt.colorHistogramに渡す場合、バーを返すことができるようにするにはLua関数 "t"が必要になります。つまり、変更されたバーを読み取るにはLua関数"t"が必要になります。それがどうしたらいいかわからない。ところであなたの応答をありがとう。編集終了

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 に答える