Hallo zusammen,
geben ist Folgender Quellcode. An der Stelle wo CompareMem aufgerufen wird müssten die Records eigentlich Identisch sein. Die Methode gibt mir aber False zurück. Wenn ich die beiden Records auswerte scheinen alle Records gleich zu sein und KFMKey ist = 'XXX 148060'.
Nach dem ich es ein paar mal Debuggt habe, entschloss ich mich die Daten in eine Datei zu schreiben um zu prüfen ob die Binär gleich sind. Das Ergebniss ist das in der Datei jeweils der erste Wert steht und nicht der Neue. Dann habe ich noch folgende beiden Zeilen hinzugefügt und in der Datei wird es als XXX Test6001 gepseichert.
Code:
lRec.SampleRecordInside.KfmKey := 'XXX 14806001';
lRec.SampleRecordInside.KfmKey := 'XXX Test';
Muss ich die Record Felder Fillcharn? Ist dies das normale Verhalten? Wie Säubere ich das Recordfeld?
Code:
TKFMKey = string[16];
TSampleRecord = record
Count : byte;
KfmKey : TKFMKey;
end;
TOtherSampleRecord = record
Count : byte;
PaIsolatorKey : TKFMKey;
PtIsolatorKey : TKFMKey;
end;
TMyRec = record
aBoolean : boolean;
KfmKey : TKFMKey;
OtherSampleRecord : array[1..5] of TOtherSampleRecord;
SampleRecordInside : TSampleRecord;
SampleRecordOutside : TSampleRecord;
SampleRecordMiddle : TSampleRecord;
res : array[1..50] of byte;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn2Click(Sender: TObject);
var
lRec : TMyRec;
lRec2 : TMyRec;
lStream : TFileStream;
lStream2: TFileStream;
begin
FillChar(lRec, sizeof(TMyRec),0);
FillChar(lRec2, sizeof(TMyRec),0);
lRec.KfmKey := 'XXX 14806001';
lRec2.KfmKey := 'XXX 14806002';
lRec.KfmKey := 'XXX 148060';
lRec2.KfmKey := 'XXX 148060';
if CompareMem(@lRec, @lRec2,SizeOf(TMyRec)) then // Müssten gleich sein sind sie aber nicht
ShowMessage('Juhu')
else
ShowMessage('Fuck');
lRec.SampleRecordInside.KfmKey := 'XXX 14806001';
lRec.SampleRecordInside.KfmKey := 'XXX Test';
ShowMessage(lRec.KfmKey);
ShowMessage(lRec2.KfmKey);
// Speichern der Testeinträge
lStream := TFileStream.Create('C:\temp\test1a.dat',fmCreate);
lStream.WriteBuffer(lRec,SizeOF(TMyRec));
lStream.Free;
lStream2 := TFileStream.Create('C:\temp\test2a.dat',fmCreate);
lStream2.WriteBuffer(lRec2,SizeOF(TMyRec));
lStream2.Free;
end;
Gruß,
DevLinus