Gecko 1.7以前はGeckoの初期化をするために、xpcom.dll
内の
NS_InitXPCOM2
を呼び出す必要があった。
この関数の引数にはnsIDirectoryServiceProvider
を指定する必要があり、
しかもこのインターフェースはGREの
場所を返せないといけない。
はっきり行って面倒くさい。
ちゃんと動作させないと一部のインターフェースが動いてくれないので、
面倒くさいが必須の作業なのだ。
まあ面倒くさい。
このインターフェースを含む初期化処理を行う関数を自作ライブラリに用意しているのだが、
初期化用ライブラリのため暗黙の動的メモリ確保を使用するコードを書きたくなかったので、
とても神経を使った。
ていうかNewInstance
クラスメソッドとかはじめて使った。
一方、Gecko 1.8以降には追加関数としてXRE_InitEmbedding
が用意された。
こいつはxul.dll
内にある関数なのだが、
非常に面倒くさいnsIDirectoryServiceProvider
の実装を
肩代わりしてくれている点において、非常にありがたい。
まあこの関数をxul.dll
から持ってくるコードを書かないといけないわけだが、
インターフェースの実装よりははるかに簡単だ。
Gecko内部の関数なので、Geckoの仕様が変わったりとかで初期化の仕方が変わっても、
ちゃんと追従できるのがうれしい。
こういう関数をもっと早く用意してくれれば無駄なコードを核時間が減るんだけどなあ。
そういえば以前nsAString
の実装をDelphiで実現したな。
Gecko 1.7でNS_StringContainerInit
その他が実装されたときには、
血の涙を流して喜んだものだ。
コメントする