|
![]() |
|
Registriert seit: 11. Okt 2003 Ort: Elbflorenz 44.372 Beiträge Delphi 12 Athens |
#1
Das Ganze ist nun noch etwas überarbeitet und verändert worden
und ich hab's mal aus dem Projekt extrahiert und in einer eigenständigen Unit verpackt, samt ein paar notwendiger Dummytypen. Wäre schön, wenn noch jemand hier auch einiges Tests mit machen könnte, nicht daß ich einfach zu Betriebsblind bin und was überseh. Bei meinen bisherigen Tests scheint das Problem der verschachtelten Records korrekt behandelt zu werden, auch wenn {$ALIGN}/{$A} unterschiedlich sind oder es sogar packed ist. ![]() Wobei ich jetzt noch mit Arrays und weiteren Records rumspielen werde. ein Testcode:
Delphi-Quellcode:
und das zugehörige Ergebnis (ausgerechnet | gemessen | Formate )
Procedure RecordInfoToStingList(SL: TStrings; RI: TXMLSerializeRecordInfo);
Var i: Integer; Begin SL.Add(Format('Align:%d', [RI.Align])); For i := 0 to RI.Count - 1 do Begin If not (RI.DType[i] in [rtAlign, rtSplit]) Then SL.Add(Format('FullOffset:%d Offset:%d Size:%d Name:"%s"', [RI.FullOffset[i], RI.Offset[i], RI.Size[i], RI.Name[i]])); If RI.DType[i] in [rtRecord, rtArray, rtDynArray] Then RecordInfoToStingList(SL, RI.SubInfo[i]); End; End; Var Test: TSearchRec; RI, RIx: TXMLSerializeRecordInfo; SL: TStrings; Begin // einfach nur den Record mit irgendetwas befüllen FindFirst(Application.ExeName, faAnyFile, Test); FindClose(Test); RI := TXMLSerializeRecordInfo.Create; Try RI.Add('Time', rtInteger); RI.Add('Size', rtInt64); RI.Add('Attr', rtInteger); RI.Add('Name', rtString); RI.Add('Exclude', rtInteger); RI.Add('Handle', rtLongWord); RIx := RI.Add('Data', rtRecord); RIx.Add('Attributes', rtLongWord); RIx.Add('', rtSplit, 4); RIx.Add('Creation', rtWord64); RIx.Add('', rtSplit, 4); RIx.Add('LastAccess', rtWord64); RIx.Add('', rtSplit, 4); RIx.Add('LastWrite', rtWord64); RIx.Add('', rtSplit, 4); RIx.Add('FileSize', rtWord64LE); RIx.Add('Reserved0', rtLongWord); RIx.Add('Reserved1', rtLongWord); RIx.Add('FileName', rtCharArray, 260); RIx.Add('Alternate', rtCharArray, 14); //RI.Parse('I"Time" I8"Size" I"Attr" S"Name" I"Exclude" W4"Handle" R"Data" (' // + 'W4"Attributes" NX4W8"Creation" NX4W8"LastAccess" NX4W8"LastWrite" IE"FileSize"' // + 'I4"Reserved0" I4"Reserved1" C260"FileName" C14"Alternate" )'); //RI.Parse('I I8 I S I W4 R ( W4 NX4W8 NX4W8 NX4W8 WE I4 I4 C260 C14 )'); //RI.Parse('ii8isiw4r(w4nx4w8nx4w8nx4w8iei4i4c260c14)'); SL := TStringList.Create; RecordInfoToStingList(SL, RI); SL.Add(''); SL.Add('------------------------------'); SL.Add(''); SL.Add(Format('FullOffset:%0:d Offset:%0:d Size:%d Name:"%s"', [Integer(@Test.Time) - Integer(@Test), SizeOf(Test.Time), 'Time'])); SL.Add(Format('FullOffset:%0:d Offset:%0:d Size:%d Name:"%s"', [Integer(@Test.Size) - Integer(@Test), SizeOf(Test.Size), 'Size'])); SL.Add(Format('FullOffset:%0:d Offset:%0:d Size:%d Name:"%s"', [Integer(@Test.Attr) - Integer(@Test), SizeOf(Test.Attr), 'Attr'])); SL.Add(Format('FullOffset:%0:d Offset:%0:d Size:%d Name:"%s"', [Integer(@Test.Name) - Integer(@Test), SizeOf(Test.Name), 'Name'])); SL.Add(Format('FullOffset:%0:d Offset:%0:d Size:%d Name:"%s"', [Integer(@Test.ExcludeAttr) - Integer(@Test), SizeOf(Test.ExcludeAttr), 'Exclude'])); SL.Add(Format('FullOffset:%0:d Offset:%0:d Size:%d Name:"%s"', [Integer(@Test.FindHandle) - Integer(@Test), SizeOf(Test.FindHandle), 'Handle'])); SL.Add(Format('FullOffset:%0:d Offset:%0:d Size:%d Name:"%s"', [Integer(@Test.FindData) - Integer(@Test), SizeOf(Test.FindData), 'Data'])); SL.Add(''); SL.Add(Format('FullOffset:%d Offset:%d Size:%d Name:"%s"', [Integer(@Test.FindData.dwFileAttributes) - Integer(@Test), Integer(@Test.FindData.dwFileAttributes) - Integer(@Test.FindData), SizeOf(Test.FindData.dwFileAttributes), 'Attributes'])); SL.Add(Format('FullOffset:%d Offset:%d Size:%d Name:"%s"', [Integer(@Test.FindData.ftCreationTime) - Integer(@Test), Integer(@Test.FindData.ftCreationTime) - Integer(@Test.FindData), SizeOf(Test.FindData.ftCreationTime), 'Creation'])); SL.Add(Format('FullOffset:%d Offset:%d Size:%d Name:"%s"', [Integer(@Test.FindData.ftLastAccessTime) - Integer(@Test), Integer(@Test.FindData.ftLastAccessTime) - Integer(@Test.FindData), SizeOf(Test.FindData.ftLastAccessTime), 'LastAccess'])); SL.Add(Format('FullOffset:%d Offset:%d Size:%d Name:"%s"', [Integer(@Test.FindData.ftLastWriteTime) - Integer(@Test), Integer(@Test.FindData.ftLastWriteTime) - Integer(@Test.FindData), SizeOf(Test.FindData.ftLastWriteTime), 'LastWrite'])); SL.Add(Format('FullOffset:%d Offset:%d Size:%d Name:"%s"', [Integer(@Test.FindData.nFileSizeHigh) - Integer(@Test), Integer(@Test.FindData.nFileSizeHigh) - Integer(@Test.FindData), SizeOf(Test.FindData.nFileSizeHigh) * 2, 'FileSize'])); SL.Add(Format('FullOffset:%d Offset:%d Size:%d Name:"%s"', [Integer(@Test.FindData.dwReserved0) - Integer(@Test), Integer(@Test.FindData.dwReserved0) - Integer(@Test.FindData), SizeOf(Test.FindData.dwReserved0), 'Reserved0'])); SL.Add(Format('FullOffset:%d Offset:%d Size:%d Name:"%s"', [Integer(@Test.FindData.dwReserved1) - Integer(@Test), Integer(@Test.FindData.dwReserved1) - Integer(@Test.FindData), SizeOf(Test.FindData.dwReserved1), 'Reserved1'])); SL.Add(Format('FullOffset:%d Offset:%d Size:%d Name:"%s"', [Integer(@Test.FindData.cFileName) - Integer(@Test), Integer(@Test.FindData.cFileName) - Integer(@Test.FindData), SizeOf(Test.FindData.cFileName), 'FileName'])); SL.Add(Format('FullOffset:%d Offset:%d Size:%d Name:"%s"', [Integer(@Test.FindData.cAlternateFileName) - Integer(@Test), Integer(@Test.FindData.cAlternateFileName) - Integer(@Test.FindData), SizeOf(Test.FindData.cAlternateFileName), 'Alternate'])); SL.Add(''); SL.Add('------------------------------'); SL.Add(''); SL.Add(RI.GetString(sfFormat2)); SL.Add(''); SL.Add(RI.GetString(sfShort)); ShowMessage(SL.Text); SL.Free; Finally RI.Free; End;
Delphi-Quellcode:
---------------------------
Test --------------------------- Align:8 FullOffset:0 Offset:0 Size:4 Name:"Time" FullOffset:8 Offset:8 Size:8 Name:"Size" FullOffset:16 Offset:16 Size:4 Name:"Attr" FullOffset:20 Offset:20 Size:4 Name:"Name" FullOffset:24 Offset:24 Size:4 Name:"Exclude" FullOffset:28 Offset:28 Size:4 Name:"Handle" FullOffset:32 Offset:32 Size:592 Name:"Data" Align:8 FullOffset:32 Offset:0 Size:4 Name:"Attributes" FullOffset:36 Offset:4 Size:8 Name:"Creation" FullOffset:44 Offset:12 Size:8 Name:"LastAccess" FullOffset:52 Offset:20 Size:8 Name:"LastWrite" FullOffset:60 Offset:28 Size:8 Name:"FileSize" FullOffset:68 Offset:36 Size:4 Name:"Reserved0" FullOffset:72 Offset:40 Size:4 Name:"Reserved1" FullOffset:76 Offset:44 Size:520 Name:"FileName" FullOffset:596 Offset:564 Size:28 Name:"Alternate" ------------------------------ FullOffset:0 Offset:0 Size:4 Name:"Time" FullOffset:8 Offset:8 Size:8 Name:"Size" FullOffset:16 Offset:16 Size:4 Name:"Attr" FullOffset:20 Offset:20 Size:4 Name:"Name" FullOffset:24 Offset:24 Size:4 Name:"Exclude" FullOffset:28 Offset:28 Size:4 Name:"Handle" FullOffset:32 Offset:32 Size:592 Name:"Data" FullOffset:32 Offset:0 Size:4 Name:"Attributes" FullOffset:36 Offset:4 Size:8 Name:"Creation" FullOffset:44 Offset:12 Size:8 Name:"LastAccess" FullOffset:52 Offset:20 Size:8 Name:"LastWrite" FullOffset:60 Offset:28 Size:8 Name:"FileSize" FullOffset:68 Offset:36 Size:4 Name:"Reserved0" FullOffset:72 Offset:40 Size:4 Name:"Reserved1" FullOffset:76 Offset:44 Size:520 Name:"FileName" FullOffset:596 Offset:564 Size:28 Name:"Alternate" ------------------------------ i"Time" i8"Size" i"Attr" s"Name" i"Exclude" w4"Handle" r"Data" ( w4"Attributes" nx4 w8"Creation" nx4 w8"LastAccess" nx4 w8"LastWrite" nx4 we"FileSize" w4"Reserved0" w4"Reserved1" c260"FileName" c14"Alternate" ) ii8isiw4r(w4nx4w8nx4w8nx4w8nx4wew4w4c260c14) --------------------------- OK ---------------------------
Ein Therapeut entspricht 1024 Gigapeut.
|
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |