![]() |
Re: VTOC/Inhaltsverzeichnis einer CD/DVD auslesen
Zitat:
Zitat:
MfG Dalai |
Re: VTOC/Inhaltsverzeichnis einer CD/DVD auslesen
Ich muss erneut um eure Hilfe bitten, weil ich momentan einen Knoten im Hirn habe und nicht weiterkomme :?.
Ich hab das Programm etwas geändert, und zwar habe ich ein Record definiert, in dem die Daten ankommen:
Delphi-Quellcode:
Um die Daten dann von dem Pointer Buf auf das Record zu übertragen, habe ich die Methode ReadBtnClick so abgeändert:
var PVD : record
VolDescType : byte; StandardID : array[2..6] of char; VolDescVer : byte; X1 : byte; SystemID : array[9..40] of char; VolID : array[41..72] of char; X2 : array[73..80] of byte; VolSpaceSize : array[81..88] of byte; X3 : array[89..120] of byte; VolSetSize : array[121..124] of byte; VolSequNr : array[125..128] of byte; LogBlockSize : array[129..132] of byte; PathTableSize : array[133..140] of byte; TypeLPathTab : array[141..144] of byte; OptTypeLPathTab: array[145..148] of byte; TypeMPathTab : array[149..152] of byte; OptTypeMPathTab: array[153..156] of byte; DirRecordRoot : array[157..190] of char; VolumeSetID : array[191..318] of char; PublisherID : array[319..446] of char; DataPrepID : array[447..574] of char; AppID : array[575..702] of char; CopyFileID : array[703..739] of char; AbstractFileID : array[740..776] of char; BibFileID : array[777..813] of char; VolCreation : array[814..830] of char; VolModDate : array[831..847] of char; VolExpirDate : array[848..864] of char; VolEffectDate : array[865..881] of char; FilStructVer : byte; X4 : byte; AppUse : array[884..1395] of char; X5 : array[1396..2048] of byte; end;
Delphi-Quellcode:
Das landet auch alles schön in dem Record. Nur habe ich Schwierigkeiten, die numerischen Felder richtig zu verarbeiten. Konkret geht's mir um die Felder Volume Space Size, Volume Set Size usw. Laut Spec sind diese Felder als Both-byte orders geschrieben:
if fDrives.Items[DriveCombo.ItemIndex].DeviceReader.ReadData(16, 1, Buf, BufLen) then
begin Move(Buf^, PVD, SizeOf(PVD)); end; Zitat:
MfG Dalai |
Re: VTOC/Inhaltsverzeichnis einer CD/DVD auslesen
Guten Morgen,
vielleicht kannst Du mit variant records arbeiten.
Delphi-Quellcode:
type
TVolSpaceSize = record case boolean of true: array[0..7] of Byte; false: Int64; end;
Delphi-Quellcode:
aber vielleicht gibt es noch eine etwas bessere praktikabelere Lösung.
//VolSpaceSize : array[81..88] of byte;
VoldSpaceSize : TVolSpaceSize; [edit] alternativ:
Delphi-Quellcode:
Grüße
VolSpaceSize : array[81..88] of byte;
VolSpaceSizeValue: Int64; .. VolSpaceSizeValue := int64(VolSpaceSize); Klaus |
Re: VTOC/Inhaltsverzeichnis einer CD/DVD auslesen
@Klaus
Ich denke so wäre es besser:
Delphi-Quellcode:
Da der Wert einmal in "intel-Notation" und einmal in "MotorolaNotation" abgelegt wird.
Tvalue : record
wert : Longint; dummy: array [0..3] of byte; end; Gruß K-H |
Re: VTOC/Inhaltsverzeichnis einer CD/DVD auslesen
Ja, da haut's mich doch vom Stuhl! Ich hatte gestern schon mit Cardinal-Typen statt des array of byte rumgespielt und es hat nicht funktioniert. Lag wohl daran, dass ich die letzten 4 Bytes genommen hatte statt der ersten 4...
"Kaum macht man's richtig, schon funktioniert's" - wie passend die Signatur ist :-D. Dankeschön an p80286 und Klaus01! MfG Dalai |
Re: VTOC/Inhaltsverzeichnis einer CD/DVD auslesen
Neben den Strukturen hatte ich damals in dem isolib Projekt auch explizite Funktionen zum Umwandeln der Integer bezüglich der Byte Order geschrieben. Diese hat dancemammal auch weiterhin in den Quellen nach der Übernahme der Quellen. Die kannst du nutzen um die Werte hin- und her zu wandeln. Ansonsten kann ich nur noch darauf hinweisen, dass nicht jedes Brennprogramm beide Felder ausfüllt (also mit beiden Byte Order) sondern meist nur eins von beiden. Von daher lohnt es sich immer vorher zu schauen welches Feld <> 0 ist und dann das entsprechende Feld zu nutzen und bei Bedarf zu wandeln.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 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