AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verstehe das Verhalten der Records nicht.

Ein Thema von DevLinus · begonnen am 6. Dez 2017 · letzter Beitrag vom 6. Dez 2017
Antwort Antwort
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Verstehe das Verhalten der Records nicht.

  Alt 6. Dez 2017, 08:28
Zitat:
Habe ich mir schon fast gedacht, aber warum wird mir im Debugger wenn ich die Variable Auswerte der Wert nicht angezeigt? Also muss ich jeden Short String, wo ich einen Kürzen String reinpacke vorher Fillcharn?
Mach Dir eine Compare Function für die Records, mit CompareMem wirst Du in solchen Fällen immer auf die Nase fallen. Da spielt auch das Align eine Rolle.

Ausgehend von Align 4 (der default denke ich) sieht Dein Record im Speicher so aus:

Delphi-Quellcode:
TSampleRecord = record
    Count : byte;
    hidden : array[0..2] of byte; // Für das Align wird das vom Compiler eingebaut
    KfmKey : TKFMKey; // 17 byte
   hidden : array[0..2] of byte; // Für das Align wird das vom Compiler eingebaut
  end;
Kannst Du einfach mit sizeof(TSampleRecord) nachschauen. Habe es jetzt nicht getestet aber gehe davon aus das der Record 24 Byte gross ist.
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#2

AW: Verstehe das Verhalten der Records nicht.

  Alt 6. Dez 2017, 08:44
Ich würde dafür class operators benutzen:
Delphi-Quellcode:
TSampleRecord = record
    Count: byte;
    KfmKey: TKFMKey; // 17 byte
    class operator Equal(a: TSampleRecord; b: TSampleRecord): Boolean;
  end;

...

class operator TSampleRecord.Equal(a: TSampleRecord; b: TSampleRecord): Boolean;
begin
  Result := (a.Count = b.Count) and (a.KfmKey = b.KfmKey);
end;

...

var
  Test1, Test2: TSampleRecord;
begin
  ...
  if Test1 = Test2 then // einfach vergleichen
    ...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz