AGB  ·  Datenschutz  ·  Impressum  







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

Array wird falschrum gefüllt

Ein Thema von Luckie · begonnen am 6. Mär 2003 · letzter Beitrag vom 6. Mär 2003
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Array wird falschrum gefüllt

  Alt 6. Mär 2003, 05:02
Ich werde noch mal wahnsinnig. Folgeder Code:
Delphi-Quellcode:
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;
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.
Aber wenn ich nachher in das Array reinkucke, stehen sie genau umgekehrt drin, das heißt so: 1, 0, 0, 0, 0.
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.

Zum leichteren Debuggen habe ich das Projekt mal angehangen.
Angehängte Dateien
Dateityp: zip sysinfo.zip (119,0 KB, 32x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2
  Alt 6. Mär 2003, 06:16
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 6. Mär 2003, 06:21
Ja, sind aber mittlerweile drin. Ich bin da hängen geblieben. Und das hat mich gewurmt wie noch was.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4
  Alt 6. Mär 2003, 16:06
Ich habe nun deinen Fehler gefunden:
Delphi-Quellcode:
    for j := 0 to de.NumberOfDiskExtents-1 do
    begin
      FDiskNumbers[j] := de.extents[j].DiskNumber;
    end;
Du wolltest wohl FDiskNumbers[i] schreiben. Denn so wie du es hast, ersetzt du immer nur FDiskNumbers[0] bei NumberOfDiskExtents=1.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5
  Alt 6. Mär 2003, 16:16
Ahhh. Das war es.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 16:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz