とりあえず、生のAPIで、変数取得するルーチンとか、書きつつ、
SqPlus(DXSquirrel)のソースを眺めていたら、
少しは、構造がつかめてきた。
やっぱり、ソース読んだり、実際に書いたりしないと駄目だねー。
自作ライブラリも、DXSquirrelのライブラリ的な基本構造を参考に、作ってみてる。
というか、ほとんど、SquirrelVMとか、SquirrelObjectとかを、使いやすいように移植という感じw
ただのコピペではなく、自分なりに、消化しつつ書き書き。
さらにある程度、理解しているので、バグってても直せるからよいのですよ。
(SqPlusのバグ見つけたりもした。本家の掲示板では指摘されてた)
理解は重要だなぁ。
ちなみに、前に書いた「変数の中身を得る」というのは、
TestString <- "hoge" TestInt <- 1234 TestBool <- true
という、Squirrelソースがあった場合、
自作ライブラリを使うと、こう書ける。
TSquirrelObject.Get は、Variant で返るので、自動で型に合わせてくれる。
Hashライクな、TSquirrelObject["文字列"] でのアクセスも、TSquirrelObject.Get と同じ。
(Squirrelのスロット表現は、Squirrelでもハッシュ風に書けるので採用)
まだ、ちょっと面倒だけど、もう少し簡単にできるようにしたい。
(例えば、面倒なので、TSquirrelObject.Get じゃなくて、直接 SquirrelVM.Get でも行けるようにするとか。後は、interface実装にして、TSquirrelObject.Releaseいらなくするとか)
SquirrelVM.GetRootTable ってのは、RootTable を得ている。
RootTableは、Rubyで言えば、main みたいなもので、
ソースのトップレベルでの暗黙の This みたいなもの。
(Squirrelのソースで、Hogeと書いても、実際には、RootTable.Hogeなのだ)
TSquirrelObject は、RootTableを含む、Squirrel内のオブジェクト表現をラップしたものです。
これで、スタックはあまり意識しなくていいはずだけどなあ?
さて、その他に実験して、Hoge.Foo.TestInt などを一発で取得する方法も分かった。
これは後ほどね。
(ちなみに、上記方法では一発では、得られないのです)
カテゴリ: [ Delphi ]