アーカイブ

2012年 4月 20日 のアーカイブ

 あたしは作者なんだから、真魚に必要な機能があればスクリプトを書かないで本体に実装しちゃえば良いわけで、だからこそどうしてもスクリプト部分は、まだまだやる事がいっぱいあるにもかかわらずついついほったらかしになってた。でも、例えばあえて標準で実装しないでスクリプトで実装した文字数カウント機能なんかは、何を1文字と数えるかがユーザーによって異なるから、自分用にカスタマイズしてカウントすれば良いという意味でそうしているから、いざスクリプトなしにしようって言う気にもならない。さらには、内部でURLをエンコードするためにわざとスクリプトを動かしてる所もあったりして、その辺もどうにかしなきゃいけない。出来ればそのままx64版にも搭載したくて頑張っている。

 真魚はWindows Script Hostを動かして、javascriptなりvbscriptなり、その他のインストールされた言語でいろいろ出来るようになっていて、それはよそ様が書いたコードで実現している。DelphiではpsvActiveScriptて言うのがあって、これってActivScp.hを翻訳したような物なんだけど、作者サイトは移転済みでもう開発の継続はしないんだろう。だから、自分でActivScp.hの更新部分を移植してやることで、とりあえずスクリプト自体は動くようになった。スクリプトは動くんだけど、スクリプトが真魚にアクセスしようとしてjscript.dllでアクセス違反が発生する。ただスクリプトを動かしたいだけなら別に真魚を使う必要はないわけで、そのスクリプトで真魚を操作しなきゃ意味がないのに、その操作部分がまだうまく行ってない。といっても、操作部分に64bit化すべき部分が見あたらない。ほとんどがIDispatchとか32bitで使ってた物をそのまま使う事になってるわけで、勝手に64bit化したインターフェースを使う訳にはいかない。それならそれで、たぶんポインタとかも32bitにしなきゃいけないはずなんだけど、Delphiの定義ではポインタは64bitになってる。だから32bitと64bitが混在したまま使うんだけど、たぶんその辺のどこかを再定義しないといけないんだと思う。エラーはIDispatch.Invokeあたりで起ってるらしいことはわかった。それも、Invoke内の一行目に到達する前に起っているらしい。ブレークポイントはたぶん効かない。今回のDelphiはブレークポイント周りがかなり挙動不審で、デバッガはあってないようなものかも。

Idispatch

 64bit化で最初につまずいたコールバック関数は、関数内関数だとアクセス違反がでて、ただの関数だとうまく行ったわけだが、その辺のルールも64bitになって変わったみたいだから、今回の件もちょっとしたルール変更に悩まされてるだけかも知れない。でも、VCLの仕様変更ならまだ対応出来るが、コンパイラとかで変更だとなかなか突き止められない。