2011-12-25 4 views
1

私はlua_callの能力を拡張するlua_tcallと呼ばれるC++関数を持っています。 lua_tcallが呼び出されると、lua_pcallのように、スタックの最上位の値がLua関数であると予想されます。私はlua_tcallがスレッドを作成し、そのスレッドの関数としてグローバルスタックの一番上にある関数を使用できるようにしたいと思います。どのようにグローバルな状態からlua_Start *に関数をプッシュして、lua_newthreadから返すのですか?グローバル状態からルアスレッドに関数をプッシュ

+0

'lua_pcall'はスタック上の一番上の項目が関数であることを期待していません。スタック上の関数の位置は ' - (1 + nargs)'です。それでは、あなたの 'lua_tcall'をスタックに載せることは、どういうことでしょうか? –

+0

lua_tcallは私が書いたテンプレート関数です(C++)。これは、最高の値がLua関数であることを期待しています。さまざまな数のパラメータをスタックにプッシュするオーバーロードがあり、0または1の戻り値をポップします。 Luaマニュアルの記法に従えば、契約は[-1、0、 - ]です(エラーは捕捉され、例外としてスローされます) –

答えて

2

状態間で値を転送するには、lua_xmoveが共有仲介を使用するよりも優れています。

+0

うわー。確かに多くのより良い。私はこのことについて知らなかった、ありがとう。 –

2

lua_Stateから別のものに関数を転送するには、両方の状態にグローバルなものを使用して、オブジェクトを仲介として格納する必要があります。グローバル変数またはレジストリエントリを使用できます。

+0

Ah。それは実際には非常に簡単な解決策です。助けてくれてありがとう。 –

関連する問題