« Cで書いた関数をJavaScriptからコール | メイン | テストのために簡易ムービープレーヤーを拡張 »

2005年05月13日

SmartScrollプラグイン開発:: よくわからないクラスの追加

    

プロパティの設定などは次のようなプロトタイプを持った関数で行う。
JSBool setter(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
cxはコンテキストで、プロセス空間みたいな物だと思う。(よくわかってません)
objは、インスタンスだと思う。
idはプロパティのid。
vpは設定すべき値。
つまり、objからネイティブなインスタンスを得て、id番のプロパティにvp値を設定すれば良いと思われるのだが、ネイティブなインスタンスをいつ、どこに、どのように設定するのか、objからどうやってネイティブなインスタンスを取得するのかが、さっぱりわからない。
ドキュメントを見たり、探したりしてもよくわからない。

SpiderMonkeyの使用を諦めようかとも思ったが、SpiderMonkeyのソースをいろいろと追ったところ、JS_SetPrivateでvoidポインタをインスタンスのプライベートデータへ設定出来、逆にJS_GetPrivateでインスタンスから設定したプライベートデータを取得できるようだ。
そして、このプライベートデータへコンストラクタ関数でネイティブなインスタンスを設定すれば良いよう。また、finalize関数で忘れずに開放するようにともある。
つまり、コンストラクタ関数でnewして、プライベートデータへ格納し、必要時プライベートデータを取得&キャストして使い、finalize関数でdeleteしてやれば良さそう。
これで何とかクラスを作れるかな。



投稿者 Takenori : 2005年05月13日 21:50




comments powered by Disqus
Total : Today : Yesterday : なかのひと