[Delphi] Squirrel DLLできた (第一種臨界不測日記)の続き。
我ながら、苦戦中。
今回、長文にて失礼。
- Squirrel のコンパイルテスト
- Squirrel の dll 化
- Squirrel の Delphi 版ヘッダー作成
-
コンパイラ兼実行環境 sq.exe の Delphi 版、sq_del.exe の作成
(↑ここまでオワタ\(^o^)/) - SqPlus みたいな、すんげー使いやすいクラスライブラリの作成
- Delphi + Squirrel をバリバリゲームに使う!(うっとり)
ここまで、二週間。
時間かけすぎだわ!
ヘッダー作成時の苦労話。
前に書いたように、
可変個引数(varargs)の問題を解決できなくて、
一か所しか呼ばれてないと思って、固定引数にしたものの、
実は、print文や、エラー出力等において、
ポインタ経由で呼ばれまくってたことが発覚(^ω^#)ビキビキ
けど、ようは、printf を外部に丸投げしてるだけじゃねーかYO!!
printf=可変個引数。
確かになっ。可変個引数なんて所詮は、printfのためのもの。
つーわけで、squirrelのソース書き換えの方向性で。
squirrel の DLL内で、_snwprintf を使い
文字列をあらかじめフォーマッティングして、Delphiに固定引数で渡すようにして解決!しますた
つまりは、printfを可変個引数で、外部に丸投げしないで、DLL内で自前で文字列処理させて、出力のみDelphiに渡す方向。(わかりにくい)
(_snwprintf が、VC++で、警告出るけど、キニシナイ!!というか他にいい方法あったらおせーて)
……さて、
Squirrel の .nutファイルをコンパイルして実行する sq.exe の Delphi版の sq_del.exe について。
とりえあえず、.nutファイルをコンパイルと実行はできるようになりました。
面倒なので、対話モードはまだつけてません ('A`)
(対話モード = Interactive Mode。コマンドプロンプトが出て、逐一実行できる。機能的には、本家のsq.exeにあるから、いらんのだけど、ま)
しかし、UNICODE対応にすると、回りがすんげー面倒くさいなー。
いちいち、WideString にキャストして、PWideString でほうらなアカン。
ちなみに、上記に書いた、可変個引数の問題の解決のおかげで、
コンパイルエラー出力等がまともに出るようになってます。
さーーーーてーーーーー。
一番の問題は、SqPlus のようなクラスライブラリ。
SqPlus が C++ の binding で、よさげなのですが、
C++ の template と#defineマクロバリバリで、そのまま移植は無理くさいですわわわわわわ。
付属のサンプル見ると(testSqPlus2.cpp)、
かなり使いやすそうなんで、参考にはしたい!
参考にするだけ!
そもそも、SqPlus 並のライブラリがないと、
スタック操作とかワケワカメで、
まともに使えそうにないのが問題なのだが (´д`;)
(プログラマだから、スタックなんてわかると思いきや、アレは人間がいじるもんじゃねえと再確認)
どうでもいいけど、SqPlus に、
Squirrel から DirectX を呼び出す、
DXSquirrelが付いているのにはビビッタ。
(SqPlus自体、DXSquirrel の改編版?みたいだけど)
Processing とか、sgl @ Ruby、NodeBox @ Python みたいに、
お手軽 インタラクティブアート環境に、化けるかも?
と、思ったけど、そこまでではないのかな?
いや、DirectX の SDK入れてないからコンパイルできなかたわけだけど……。
■参考リンク
カテゴリ: [ Delphi ]