Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Record Größe zur Laufzeit bestimmen

  Alt 19. Apr 2008, 16:22
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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat