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その他が実装されたときには、
血の涙を流して喜んだものだ。
