Unterschiedliche Structure-Größen zw Delphi und BCB bei TBitmapFileheader
-
Hallo!
Ich verwende den CPPBuilder 6 und habe folgendes PRoblem, welches ich mir
nicht erklären kann:Ich benutze sowohl Delphi-Unit als auch cpp-Units und lege in beiden eine
Variable vom Typ TBitmapFileHeader an. Die Variable ist in Windows definiert
(wingdi.h) und somit für beide eigentlich identisch. Die Structur setzt sich
zusammen aus: Word,DWord,Word,Word,DWord und sollte somit 14 Byte groß sein.In der Delphi-Implementation wird die Variable auch richtig angelegt und
sizeof gibt auch 14 Byte zurück. In der cpp-Implementation ist die Variable
aber 16 Byte groß. Folglich kommt es sehr merkwürdigen Effekten:
in der cpp-Unit wird die Variable deklariert und dem letzten Element der
Struktur wird der Wert 1 übergeben. Im Debugger wird aber für dieses ELement
der Wert 65536 (2^16, also genau um die 2Byte verschoben) angezeigt.
Verwende ich showmessage für dieses Element, wird wieder der Wert 1
angezeigt. ?!
Übergebe ich die Variable an eine Delphifunktion kollidiert natürlich die 16
Byte große Variable mit der dort erwarteten 14 Byte großen Variablen. Das
letzte Element der übergebenen Variablen hat hier wieder den falschen Wert
65536.Ich habe momentan keine Ahnung warum BCB eine falsche Größe für die Variable
anlegt. Ich habe auch in den Compileroptionen keine Einstellmöglichkeit
gefunden. Ich vermute mal, dass das erste Element, welches 2 Byte groß ist,
als 4 Byte adressiert wird und der Fehler dadurch zustande kommt.Wenn jemand einen Hinweis, eine Idee oder einen Lösungsvorschlag hat, würd
ich mich sehr darüber freuen.Gruß, Jörg
-
TBitmapFileHeader ist nichts anderes als ein Synonym für BITMAPFILEHEADER aus der WinAPI, und diese Struktur hat 14 Bytes. Definiere dir doch einfach eine neue Struktur, und dann ist gut. Oder benutze gleich BITMAPFILEHEADER.