« Flashはレイヤーに描ける? | メイン | iTJSDispatch2 を実装していく »
2005年04月13日
吉里吉里 COM/.NET拡張:: TJS2からCOMを使う
Tweet @jin1016をフォローFlashでCOM関連を調べていて、TJS2からCOMを呼べたら楽しいかもと思った。
TJS2からCOMが使えるのなら、VideoOverleyのFlash実装がTJSで書けるはず。
それをやることにあんまり意味はないのだが、Excelでグラフをぐりぐり回すよりは用途あるかも。
他に使えそうなことと言ったら、IEを吉里吉里の中に埋め込み表示することだろうか?
まあ、なんだかんだで使いではあるかもしれない。
でも、COMが使えるPerlでやったことがあることといったら、Excelのファイルを読み込んで、ソースコードを生成させることぐらい。それはそれでかなり便利なのだが、TJS向きではない気がする。
ま、とにかく楽しそうなので、少し調べて、コードを書いてみることにした。
実際の実装方法は、Win32OLE 製作過程の雑記という、OLEをRubyへ実装する過程について書かれたページを見てみると、面倒そうではあるが、そんなに大変ではなさそう。
とりあえず、CoCreateInstance 関数をプラグインで登録し、そいつがクラスのインスタンスを返すような実装でいいかな。
でも、その返すインスタンスってiTJSDispatch2 を継承したクラスのインスタンスでいいんだろうか? なんとなくそんな感じだが。
後、メソッドのパラメタにあるobjthisが、実行しているクラスのコンテキストなのか?
つまり、objthis->m_pDispatch->invoke() ってな感じになるのだろうか?
とりあえずは、クラスとインスタンスの関係と、iTJSDispatch2のメソッドでどのように振舞えばよいのかよくわからないと言うのを解決しないとまずそうだな。
作りつつ、聞いてみるか。
それはさておき、COMよりも .NET Framework のクラスライブラリが使えないかなぁ? とずっと思っていたりする。(COMが使えれば何とかなるのかな?)
後、Pythonとか、ImageMagick、SQLiteが使えるといいんだけど。
TJSQLiteとかかなりやってみたい。
単にその名前が使いたいと言うのがかなり大きいんだけど、レコード状のデータを扱う場合、RDBMSが使えると楽だと思う。
たとえば、RPGでアイテムや敵キャラなどはRDBに入れて使うといった用途に向いてるだろう。
投稿者 Takenori : 2005年04月13日 00:09
コメント
こんにちは。
IDispatchへの対応はかなり面白そうだと思ってます。
http://kikyou.info/diary/?200503#i24_1
VARIANTの変換が結構面倒そうです。TJS2には無い
型がいろいろあって全て対応というわけには行かない
と思います。
あとは(TJS2側の)DISPIDの取得も面倒かもしれません。
Rubyは記憶違いでなければ、オブジェクトの全ての
メンバの識別子を持っているグローバルなハッシュ
テーブルがあって、名前が決まればIDが一意に決まる
ので、IDispatchとの名前の変換にはそれをうまく
使っていたような気がします。
間違っていたらすみません。
しかし、TJS2だとそうはいきません。メンバが動的に
削除追加されるうえにそれを一意に識別するIDを
持っていないので、前もってDISPIDを決定するこ
とが難しいです。
ここら辺の面倒な処理は、内部構造がよく似ている
PHPの処理が参考になると思います。
あと SQLLiteインターフェースを持ったプラグインは
meyさんの所にありました。
http://undine.sakura.ne.jp/kirikiri/main.html
投稿者 W.Dee : 2005年04月13日 10:53
W.Deeさん、こんばんは。
IDispatch 周りはソースを追っていないので、全然分かっていません。(笑)
後ほど、IRCの方へお邪魔します。
PHPの場合.NETもサポートしているんですね。
http://www.php.net/manual/ja/class.dotnet.php
これはかなりやる気出てきたかも。
後、COMが使えれば、ADOも使えるんですね。
VARIANTはPHPの場合、VARIANTクラスを実装しているようです。
ないのは全部stringで返すようにしようと思っていたんですが、+ VARIANTをサポートしても良いかもしれませんね。
SQLLite は既にあったんですね。
知らなかったです。
投稿者 Takenori : 2005年04月13日 21:07
comments powered by Disqus