Moin Brechi,
mal abgesehen, dass ich die Sache etwas anders angehen würde (
Delphi-Quellcode:
function csGetRecordSize(const ATypes: array of TxType;const AiAlignment: Integer): Integer;
var
i : Integer;
iIncrement : Integer;
begin
Result := 0;
for i := Low(ATypes) to High(ATypes)-1 do begin
iIncrement := 0;
case ATypes[i] of
xInteger : if AiAlignment > 4 then iIncrement := AiAlignment else iIncrement := 4;
xByte : iIncrement := AiAlignment;
xDouble : if AiAlignment > 8 then iIncrement := AiAlignment else iIncrement := 8;
xExtended : begin
case AiAlignment of
1,2 : iIncrement := 10;
4 : iIncrement := 12;
8 : iIncrement := 16;
end;
end;
xWord : if AiAlignment > 2 then iIncrement := AiAlignment else iIncrement := 2;
end;
inc(Result,iIncrement);
end;
if High(ATypes) > -1 then begin
case ATypes[High(ATypes)] of
xInteger : Inc(Result,4);
xByte : Inc(Result,1);
xDouble : Inc(Result,8);
xExtended : Inc(Result,10);
xWord : Inc(Result,2);
end;
end;
end;
), frage ich mich, was SizeOf da eigentlich bei einem Alignment von 8 veranstaltet.
SizeOf errechnet 24, was ja, wie man leicht von Hand nachrechnen kann, falsch ist.
(Byte erfordert 8, Extended 16 und Integer 4 Byte, macht zusammen 28 )
Bei 1, 2 und 4 ist alles richtig.
Ausprobiert hat ich es mit D7 und D2006