質問。
C からlua の関数を呼ぶ -> 呼ばれた関数は、lua 内の別の関数 A そのものを返す -> C 側でそれを保持して、必要なときに A を呼びだす
てことをやりたいんだけど、どうすればいいですか?
lua の関数オブジェクトやみたいなのをスタックから取得する関数が見当たらないのですが。
lua_getglobal(L, "getfunc");
lua_call(L, 0, 1);
myfunc = スタック[-1]からlua関数を取得
... しばらくたってから ...
myfunc をスタックにpush
lua_call(...)
ということがやりたいです。
>>982 Lua はオブジェクトを直接C側で参照する機構を持たない。よって単純には出来ない。
一般的には luaL_ref を使ってオブジェクトのリファレンス(絶対重ならないint値)をとって、
それをつかってレジストリテーブルにつっこんでおいて、必要になったらそのリファレンスを
つかってレジストリテーブルから引っ張り出してくる、という手法がとられる。
そんなややこしいのはいやじゃって人は、リファレンスを C側で保持できる squirrel オススメ
いまのプロジェクトにはC縛りがあるのでC++なsqurrelはダメなんです。
luaL_ref が一番素直そうなのでそれでやってみます。どうもありがとう。
SquirrelってC++だっけ?
bindは確かにC++だが、直叩きだったらCの範疇でいけたような・・・
squirrel のソース自体は c++ だよ。
class でなくて struct なのは趣味かね。
ただ、インターフェース的には全部C合わせなので、普通にリンクして使える。
例外とかも全く使ってないから問題になるところはどこにもない。
プロジェクトが C縛りってのがいまどきだと意味不明だねぇ
∧_∧ / ̄ ̄ ̄ ̄
( ・∀・) < Lua!!
⊂/ 9) \____
q( /
> >
テーブルAのメソッドBを引数Cで呼んで戻り値D, Eを得たいんだけど、
// スタック初期化
lua_settop(L, 0)
// A::Bをpush
lua_getglobal(L, "A")
lua_pushstring(L, "B")
lua_gettable(L, -2)
// 暗黙の引数selfをpush
lua_getglobal(L, "A")
//引数Cをpush
lua_getglobal(L, "C")
//実行
lua_call(L, 2, 2)
//luaで return d, e された戻り値を受け取る
D = lua_tointeger(L, 1)
E = lua_tointeger(L, 2)
てやると、D,Eにluaで返した値が入らないんだけど、どうしてですか???
最初に lua_getglobal(L, "A") したときのAがスタックに残ってる。
lua_gettable(L, -2) の後に lua_remove(L,-2) を入れるか、
その後の lua_getglobal(L, "A") を消せばいいと思うよ
>>989 後者の方法だと self が消えない?
>>986 C++がぜんぜんわからないってのがいまだに上にいたりするからな…
自分がそういう上司に当たって死にかけてからもうずいぶんになるが、
いまだにそういう人はちょくちょく見かける。
CとC#しか仕事で使ってません
てかつかえません
サーセン
>>984 Cオンリーなら、
// 一行コメント
も使っちゃダメなんだろうな、大変だな。
C99
C++ダメなプロジェクトが、C99を(ry
MSVCがC99に準拠することは今後も無いんだろうな
//は使えるけど
うめ
次スレ立ってないのに埋めんなw
テンプレに、大きな変更ないよね?
ぅ
あ
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。