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 時間半も立ち読みするくらいならとっとと買えと……。

コメント

_ btm ― 2005年10月02日 14時38分

記事の指摘ありがとうございます。
この部分はかなり前から信じこんでて、疑いもせずに記事に書いてしまいました。
恥ずかしいうえ、読者の方には申し訳ないです。

時間ができたら、フォローアップの記事と、余力があればQueryInterfaceあたりを調べて、何が行われてるのかはっきり示したいと思います。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
「ハイパーテキストマークアップ言語」をアルファベット4文字でいうと?

コメント:

トラックバック

このエントリのトラックバックURL: http://nanto.asablo.jp/blog/2005/09/28/90674/tb