C MAGAZINE Firefox 特集2005年09月28日 05時50分

C MAGAZINE 2005 年 10 月号の特集「Firefox のすべて」を読みました (ごめんなさい、立ち読みです) 。「Part. 3 ソースからみた Firefox」は私に C++ での GUI プログラミング (というより C++ 自体) の経験がないこともあってざっと目を通すだけだったのですが、ちょっと気になった点が。

「Interface と実装は同じ UUID を持つ」というような記述があったと思うのですが、これは誤りではないでしょうか? 私も以前勘違いしていたのですが、ひとつの「実装」が複数のインターフェースを実装することもあれば、ひとつのインターフェースが複数の「実装」に実装されることもあるので (ややこしい……) 、インターフェースと実装の UUID は独立している必要があるのではないかと。例に出ていた StringBundleService の場合も、

インターフェース
  • IID: nsIStringBundleService
  • UUID: D85A17C0-AA7C-11d2-9B8C-00805F8A16D9
実装
  • Contract ID: "@mozilla.org/intl/stringbundle;1"
  • UUID: D85A17C1-AA7C-11d2-9B8C-00805F8A16D9

1 ビット違いますし。

それから、個人的には、Components.classes[...].createInstance() / getService() が呼び出された時点で実装が作られ、QueryInterface() はその実装の持つインターフェースを実際に使えるようにするもの、とイメージしているので、そのあたりの説明に少し違和感を感じました。

……なんて買ってもいないのにあつかましく書き散らして申し訳ない限りです。ほかの記事も合わせて 1 時間半も立ち読みするくらいならとっとと買えと……。