2013年10月22日火曜日

拡張性に魂を縛られた人々

Google V8 に ActiveXObject サポートを組み込んでみるテスト.
これができたら,VSD for GPS の拡張性が飛躍的に上がって,例えば Excel 起動してセルに値書き込んで保存とか JavaScript で制御できる.

そんな機能いらねぇしwwww

まぁログリーダで任意のプログラム起動できるし,XMLHttpRequest が動いたら GeoCoding とかできるかもしれんし,そこら辺は使い道あるんじゃなかろうか.
まぁぶっちゃけそこに山があるから登る的な感じで拡張性を広げたかっただけ.

という訳で実装開始.
とりあえず C++ オブジェクトの IDispatch をラップする JavaScript オブジェクトの ActiveXObject を設計.
普通は V8 の SetNamedPropertyHandler で,メソッド・プロパティが参照されるたびに IDispatch::GetIDsOfNames() して IDispatch::Invoke() するのが素直なんだろうけど,これだと毎回名前→ID 変換テーブルを舐める気がして,V8 のJIT を生かせないような気がしたので,new ActiveXObject された時に全メソッド・プロパティをオブジェクトに登録することにした.これだと for( hoge in obj ) とかも問題なく動くので結果的に楽.

で,Excel を起動することろまではたどり着いたが,
ExcelSheet.ActiveSheet.Cells( 1, 1 ).Value = "hoge";
で Cells は関数じゃねぇ! って怒られた.先は長い…

0 件のコメント:

コメントを投稿