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.


Anmelden zum Antworten