![]() |
Array wird falschrum gefüllt
Liste der Anhänge anzeigen (Anzahl: 1)
Ich werde noch mal wahnsinnig. Folgeder Code:
Delphi-Quellcode:
Ich habe insgesammt 5 Partitionen (c bis f auf HDD0 und i auf HDD1) und beim Füllen des Arrays FDiskNumbers geht es schief. Er bekommt nach einander die Werte 0, 0, 0, 0, 1, also in der richtigen Reihenfolge wie es auch richtig ist.
procedure THDDInfo.DumpDiskExtents;
var VolumePath : String; hVolume : cardinal; BytesWritten : DWORD; de : VOLUME_DISK_EXTENTS; i, j : Integer; TempArray : TDiskNumArray; begin FDiskNumbers := nil; setlength(FDiskNumbers, length(FPartitions)); for i := 0 to length(FPartitions)-1 do begin VolumePath := '\\.\'+FPartitions[i]+':'; hVolume := CreateFile(pointer(Volumepath), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if hVolume = INVALID_HANDLE_VALUE then exit; DeviceIOControl(hVolume, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, nil, 0, @de, sizeof(de), BytesWritten, nil); for j := 0 to de.NumberOfDiskExtents-1 do begin FDiskNumbers[j] := de.extents[j].DiskNumber; end; end; end; Aber wenn ich nachher in das Array reinkucke, stehen sie genau umgekehrt drin, das heißt so: 1, 0, 0, 0, 0. :wall: Aber die Reihenfolge ist natürlich wichtig, da ich auch ein Array mit den Laufwerksbuchstaben habe und das soll nachher wieder zusammenpassen logischerweise. :| Die Compiler-Optimierung habe ich schon ausgeschaltet, hilft nichts. :roll: Zum leichteren Debuggen habe ich das Projekt mal angehangen. |
Bei mir liefert er erstmal nur 0. Liegt aber auch daran, dass ich nur eine Platte im Rechner habe.
Was mir in deinem Quellcode allerdings abgeht sind die CloseHandle() aufrufe. |
Ja, sind aber mittlerweile drin. Ich bin da hängen geblieben. Und das hat mich gewurmt wie noch was.
|
Ich habe nun deinen Fehler gefunden:
Delphi-Quellcode:
Du wolltest wohl FDiskNumbers[i] schreiben. Denn so wie du es hast, ersetzt du immer nur FDiskNumbers[0] bei NumberOfDiskExtents=1.
for j := 0 to de.NumberOfDiskExtents-1 do
begin FDiskNumbers[j] := de.extents[j].DiskNumber; end; |
Ahhh. Das war es. :hello: :bounce1:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 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