2007年7月5日

pixelCrew日記号外 - CCSIZEOF_STRUCT現る、の巻き

先日のWindows SDK for VistaのComCtl32.libに関する件ですが、MSDNのフォーラムに投稿しました。
そこで、りょーいち氏(りょーさん)に助けてもらいました。
りょーさんをはじめ、以下で詳細な紹介をしている記事を紹介しますが、情報を広める意味でこの投稿を書いています。
自分は困っていただけです。いつか助ける側に回りたいものです。
MSDNのフォーラムに投稿をするのと同時に、SDKを新しくしたり、統合したり、アンインストールしたり、さらにVisualStudio2005再セットアップしなおしたりゴタゴタしてるので試せてませんが鉄板だと思います。
とはいえ、コントロール(構造体)のバージョンごとのサイズを示す定数ってどんな風に書かれてるの? と思いました。
そんなわけでREBARBANDINFO_V3_SIZE、REBARBANDINFO_V6_SIZEの正体だけでも探ってみました。
構造体のサイズの取得 (CCSIZEOF_STRUCT) - Windows SDK
この投稿書いている本日(2007/07/05)現在、日本語で取り上げているところはここだけでした。
# 各地のアンテナにはひっかかってる
REBARBANDINFO_V*_SIZE定数はCommCtrl.hに書かれているのですが、その定義をさらに辿っていくとCCSIZEOF_STRUCTマクロにたどり着きます。
#define CCSIZEOF_STRUCT(structname, member) \
    (( (int)( (LPBYTE) (&((structname*)0)->member) - \
            ( (LPBYTE)((structname*)0) ) )) + \
    sizeof( ((structname*)0)->member) )

まさにマクロです。すげー。

1 件のコメント:

匿名 さんのコメント...

CCSIZEOF_STRUCT にたどり着いたときはちょっとした感動だったよ。

あと、REBARBANDINFOA_V*_SIZE とCCSIZEOF_STRUCT の日本語の引っかからなさにもある意味感動したw

この辺は後日詳しく調べて私もblogにしようと思ってますー

その時は引用リンク貼るからよろしくw