2013-04-30 9 views
15

Zajmuję się moim pierwszym spojrzeniem na Windows API i po napotkaniu WNDCLASSX nie mogłem przestać się zastanawiać, dlaczego jego członek, cbSize, istniał. Opis cbSize, według MSDN to: Rozmiar, w bajtach, tej struktury. Ustaw ten element na sizeof (WNDCLASSEX). Pamiętaj o ustawieniu tego elementu przed wywołaniem funkcji GetClassInfoEx. Opisuje to i wskazuje na jego cel, ale nie ignoruję konieczności.Dlaczego struktura może przechowywać swój własny rozmiar?

Moje pytanie brzmi: dlaczego struktura musiałaby kiedykolwiek przechowywać swój własny rozmiar? Czy żadna funkcja obsługująca strukturę nie ma dostępu do tej informacji za pomocą sizeof?

+0

Zgaduję: przekonaj. Również efektywność jest o wiele bardziej wydajna, aby raz uruchomić sizeof (coś) i przechowywać go, a następnie używać go wielokrotnie, niż ma to w założeniu działać wielokrotnie. –

+1

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

+0

Asystowanie wersji i platforma maszyny to dwa typowe powody. – WhozCraig

Odpowiedz

22

Późniejsze wersje interfejsu API systemu Windows mogą dodawać nowe pola do struktury. Jeśli struktura ma rozmiar, starszy kod może wywołać funkcję API, która tylko kopiuje pola znane z starego kodu.

+7

Być może WinAPI zrobił tym razem coś dobrego. :) –