- 849 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:28:01 ]
- >>847
マニュアルの「C言語のAPIからSquirrelの値への強参照の維持」のところ以降を参照 以下使い方の例の一つ:複数のsquirrelのクロージャをC側で保持して任意に呼び分け 前準備 1. スクリプトをコンパイル 2. スタック上のクロージャを、sq_getstackobject でHSQOBJECT として参照保持 3. スタック上のはとりあえず必要ないので sq_pop で解放 4. 必要な分だけこれを繰り返す 使う場合 1. スタックに HSQOBJECT として参照してるクロージャを sq_pushobject で積む 2. sq_call でそのクロージャを呼びだす LUA でおなじようなことをしようとすると、なにかしら名前をつけてグローバルのテーブルか レジストリにいれとくとかして、それをいちいちスタック上で取り出すような処理が必要なはず。 squirrel だと、任意のオブジェクトに対する参照をC側でもてるので、 (強参照なので、参照されてる限り消えない)、使うときだけまたスタックに積む、という使い方ができる。 値を set するにはスタック介さないとダメだけど、get だけならAPIで直接ぬくこともできる。 制御の本体を C 側でおこなってる場合でも、この機構があるおかげで、Squirrel 側のオブジェクトの とりまわしがすごい楽にできる。 sqplus を使うと、このあたり関連の処理が SquirrelObject としてラッピングしてあって、 値の代入から配列/辞書としての操作まで、全部 Cからのメソッド呼び出しで 簡単にできるようになってる。
|

|