Kleine Anmerking, anstatt an dem ALIGN rumzuspielen, kann man auch einfach einen packed record
bzw. ein packed array
draus machen.
Nöö, es geht ja nichtmal tatsächlich um Records, sondern um Enums. Und einfach den Record
packed
zu machen bringt gar nichts, wenn auf
API-Seite (z.B. C
Dll) der Record korrekt aligned ist. Das Alignment sollten die meisten Compiler sowieso gleich handhaben. Problematisch ist halt bei so Dingen, dass Delphi die Enums immer versucht in den kleinstmöglichen Typ zu packen (
{$Z1}
), während die Min-Enum-Size unter C/C++ der Größe eines
int
s entspricht, also unter Windows dann 4-Byte groß ist. Deshalb muss man Delphi an dieser Stelle mit
{$Z4}
beibringen dies für die betroffenden Enums ebenfalls so zu machen.
Und nebenbei ist
packed
äquivalent zu
{$A1}
, macht also keinen großen Unterschied was man verwendet - wobei ich persönlich das
packed
auch vorziehen würde.