2013-04-30 14 views
15

私はWindows APIを初めて見ていて、WNDCLASSXに遭遇したときに、そのメンバーがなぜcbSizeであるのか不思議に思うのを助けることができませんでした。 cbSizeの説明はMSDNによるこの構造体のサイズ(バイト単位)です。このメンバをsizeof(WNDCLASSEX)に設定します。 GetClassInfoEx関数を呼び出す前に、必ずこのメンバを設定してください。これはそれを記述し、その目的を示唆していますが、私は必要性を否定しません。構造体が独自のサイズを格納するのはなぜですか?

私の質問はこれです:なぜ構造体が独自のサイズを格納する必要があるのですか?構造体を扱う関数がsizeofを使用してその情報にアクセスすることはありませんか?

+0

私の推測:convince。効率性は、sizeofを(何か)実行してからそれを保存し、それを何度も繰り返し使用することが、sizeofを何度も実行するよりはるかに効率的です。 –

+1

'do_something_with((struct foo *)i_am_a_bar_ptr); ' –

+0

バージョンアシストとマシンプラットフォームは、2つの一般的な理由があります。 – WhozCraig

答えて

22

Windows APIのそれ以降のバージョンでは、構造体に新しいフィールドが追加されることがあります。構造体にサイズがある場合、古いコードはAPI関数を呼び出すことができます。このAPI関数は、古いコードが認識しているフィールドのみをコピーします。

+7

おそらく、WinAPIは今回は何かをしています。 :) –

関連する問題