[WinAPI] TBBUTTON mit relativen Wert

Weiterhin nicht richtig. sizeof(TBBUTTON*) ist auf x86 4 und auf x64 8. Das hat überhaupt rein gar nichts mit der Anzahl Buttons zu tun, die im Array sind.
 
Die wirkliche Anzahl an Buttons. Wie mehrfach gesagt: sizeof(T*) gibt nicht die Anzahl Elemente zurück sondern die Grösse eines Pointers auf deinem System. Die Anzahl Buttons sind in quantityFiles.
 
Irgendwie hast du mich mit den letzten Beiträgen ein bisschen dureinander gebracht. Jetzt weiß ich was du meinst.

Mit
C++:
sizeof(tbButtons)/20
habe ich immer die Anzahl der Buttons bekommen, aber ich hab es schon geändert im Code. :)
 
Hallo Hunter

Ich denke ich erkläre es am besten mal ohne den Bezug zu deiner Toolbar. Schauen wir uns mal verschiedene Situationen mit sizeof an:
C++:
sizeof(TBBUTTON) = 20

Dies schliesse ich aus deinen Postings. Die Grösse der Struktur TBBUTTON ist also 20 Bytes. So, nächste Situation:
C++:
TBBUTTON buttons[3];
sizeof(buttons) = 60

Ein Array (new T[N] ist kein Array (!)) mit fixer Grösser gibt bei sizeof entsprechend die Anzahl Elemente * Grösse eines Elements zurück. Mit anderen Worten:
C++:
T someArray[N];
sizeof(someArray) = sizeof(T) * N

So, nun kommen wir zu deinem Fall:
C++:
TBBUTTONS* buttons = new TBBUTTONS[3];

In diesem Falle ist buttons kein Array. Es ist lediglich ein Zeiger und somit gibt sizeof auch nur die Grösse des Zeigers zurück. Nehmen wir an du compilierst dein Programm als 32 Bit dann ist sizeof(buttons) entsprechend 4, weil da ein Pointer halt 4 Bytes gross ist. Das Ergebniss ist also nicht wie du meinst 60 sondern 4. Anders gesagt:
C++:
T* value = new T[N];
sizeof(value) == 4

Nun noch kurz zu deiner Verwendung:
Warum machst du immer mit sizeof? Das ist für nichts, du hast ja bereits eine Variable, die die Anzahl Buttons angibt, bei new gibst du ja bereits mit quantityFiles an wie viele Buttons du allozierst.

Viele Grüsse
Cromon
 
Zurück