Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Auf einen Record direkt zugreifen (https://www.delphipraxis.net/141521-auf-einen-record-direkt-zugreifen.html)

Opa 10. Okt 2009 19:10


Auf einen Record direkt zugreifen
 
Wenn ich so einen Record habe (siehe unten), wie kann ich auf dem Direkt im Speicher zugreifen?
Delphi-Quellcode:

  PDateiListRec = ^TDateiListRec;
  TDateiListRec = packed record
    SRec         : TSearchRec; //SysUtils
    Pfad         : string;
    DateiName    : string;
    Ext          : string;
    DestPfad     : string;
    DestDateiName : string;
    DestExt      : string;
    CRC64Calc    : int64;
    Duplikat     : boolean;
    Error        : boolean;
    Change       : boolean;
    DateTime     : TDateTime;
    DuplikatIndex : integer;
    Select       : boolean;
    Index        : word;
  end;
var
S1,S2 : TdateiListRec;
Was ich machen möchte ist folgendes.
if S1 = S2
then Label1.Caption := 'true'
else Label1.Caption := 'false'
Das geht so nicht!

Ich möchte den Ganzen Record in ggf. ein array of byte speichern um ihn mit dann zu vergleichen. Ich könnte die ganzen Namen nehmen und diese Umwandeln und dann diese Speichern. Das ist naja.

So in der Form von
For I := 1 to length(S1.Dateiname) …
Buf1[0] := S1.Dateiname[I]; usw.
Diese geht - natürlich.

Ich möchte den Speicher mit Move Kopieren (länge kann ich ermittel) etwa so. Nur das geht auch nicht.
Delphi-Quellcode:
function Dh_ByteCompare(AB1,AB2:pointer;AL1,AL2:word):boolean;
var
  Buf1 : array[0..1255] of char;
  Buf2 : array[0..1255] of char;

begin
  Move(AB1^,Buf1,SizeOf(Buf1));
  Move(AB2^,Buf2,SizeOf(Buf2));
End;
Aufruf:
Dh_ByteCompare(@S1,@S2,L1=XX,L2=XX);

Ich hoffe ich habe mich klar ausgedrück

DeddyH 10. Okt 2009 19:15

Re: Auf einen Record direkt zugreifen
 
Könntest Du nicht einfach 2 PDateiListRec nehmen und diese mit CompareMem vergleichen :gruebel:?

Die Muhkuh 10. Okt 2009 19:24

Re: Auf einen Record direkt zugreifen
 
Mit class operator sollte sowas funktionieren.

DeddyH 10. Okt 2009 19:25

Re: Auf einen Record direkt zugreifen
 
Gab es die in Delphi 7 schon?

Die Muhkuh 10. Okt 2009 19:26

Re: Auf einen Record direkt zugreifen
 
Nein, hab's auch eben erst gesehen, dass der Herr TE Delphi 7 verwendet. :-)

Opa 10. Okt 2009 22:02

Re: Auf einen Record direkt zugreifen
 
CompareMem, scheint zu gehen.
Danke

sirius 11. Okt 2009 09:57

Re: Auf einen Record direkt zugreifen
 
Liste der Anhänge anzeigen (Anzahl: 1)
comparemem sollte aber nicht gehen, da das Record dynamische Komponenten (hier: strings) enthält.
Irgendwo hatt ich mal eine Funktion zum vergleichen von beliebigen Records geschrieben :gruebel:
Wenn es aber nur um einen bestimmten record geht, ist es schneller du schreibst in dem Fall eine angepasste Vergleichsfunktion.

Edit: gefunden (Anhang), und sieht so aus als hätte ich es damals fertig programmiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr.

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