Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriff auf Variante Teile in Record-Typen (https://www.delphipraxis.net/57704-zugriff-auf-variante-teile-record-typen.html)

NicoDE 28. Nov 2005 15:56

Re: Zugriff auf Variante Teile in Record-Typen
 
Zitat:

Zitat von ma2xx
Wenn ich folgenden Code teste ...
Delphi-Quellcode:
TTest = record
    case Typ:Boolean of
{$A-}
    false: (T1     :Integer);
    true: (T2     :Double);
{$A+}
end;
... dann erhalte ich tatsächlich gleiche Adressen für T1 und T2:

Weil es das gleiche ist, als wenn du die Struktur als 'packed' deklariert hättest.

Test-Code:
Delphi-Quellcode:
type
  TTest = record
    case Typ: Boolean of
{$A-}
      False: (T1: Integer);
      True: (T2: Double);
{$A+}
  end;

function FieldOffset(const Struct, Field): Cardinal;
begin
  Result := Cardinal(Addr(Field)) - Cardinal(Addr(Struct));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Test: TTest;
begin
  ShowMessage(
    'T1: ' + IntToStr(FieldOffset(Test, Test.T1)) + #13#10 +
    'T2: ' + IntToStr(FieldOffset(Test, Test.T2))
    );
end;
Ergebnis (Delphi 6):
Code:
T1: 1
T2: 1
Ziel sollte aber sein, dass beide Offsets 8 sind (wie in der C-Referenzstruktur).


Gruß Nico


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz