ASRの修正続き2/15の続きさて、動くようになったかと思ったが、そうではなかった。ダウンロードのページ以下のようなスクリプトが動かないとのことだった。foo();}</script>といった、言語間のインターオペラビリティでエラーとなる。ホストから見れば、Rubyのfooも、JScriptのbarも、どちらもwindowオブジェクトのグローバル関数だ。したがって、windowのIDispatch*で自分が知っている関数について(この場合はfoo)は、自分でwindowのIDispatch*からJScriptが呼べるようにしてやらなければならない。windowのIDispatch*を使ってデリゲートを実装する必要がある。スレッド間のマーシャリングが厄介で、と最初考えたが、良く考えたら、JScriptやホストがRubyのスレッド内から呼び出すはずはなかった。したがって、GetScriptDispatchに返すwindowのIDispatch*をラップしてやり、そこのGetDispIdやInvokeExで呼び出しを切り替えれば良いことになる。MSDNには優先順位は書いていないので、ホスト優先とすることにした。@window.alert(x)endは、一見するとうまく動きそうで、かつ、Rubyスクリプト内から呼ぶ分には、正しく動くが、仮にJScriptから呼び出そうとすると、ASRは、windowのalertを先に見つけ、windowのIDispatch*へ委譲してしまうので、Ruby側のalertは呼ばれない。名前のバッティングはしてはいけない。02:00)それは良かったです。2chはほとんど読まないので、もしバグを見つけたら、最新の日記にでもツッコミ入れてください。