| Autor |
Beitrag |
nooby
      
Beiträge: 44
Win XP Pro.
D7
|
Verfasst: Mo 15.09.03 23:57
|
|
UC-Chewie
      
Beiträge: 531
WinXP
D5 Ent
|
Verfasst: Di 16.09.03 00:34
Hmm, seltsam. Solange der Datenträger (bzw. die Partition - also der logische Datenträger) nicht neu formatiert wurde, sollte die SN eigentlich gleich bleiben.
Poste doch mal den Code des Programms, in dem das passiert.
_________________ Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 16.09.03 04:56
Eventuell ID mit 0 initialisiern.
|
|
nooby 
      
Beiträge: 44
Win XP Pro.
D7
|
Verfasst: Di 16.09.03 12:29
Es hat wohl etwas mit dem initialisieren zu tun gehabt. ID := 0 hat zwar nicht funktioniert, aber mit ID := ID vor dem Aufruf von GVI (so blöd das auch klingt) hat es dann funktioniert.
Andere Frage, beim ausführen des Quellcodes läuft jetzt alles richtig, aber wenn ich die exe dann starte, bekomme ich die Meldung:
Die Anweisung in "0x004039ca" verweist auf Speicher "0x014f2acc". Der Vorgang "read" konnte nicht auf dem Speicher ausgeführt werden... (wobei diese Speicherbereiche variieren)
Was kann das denn sein?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 16.09.03 18:08
1. Neue Frage neuer Thread.
2. Auch wenn es dir total unwichtig erscheint, und das muß es, sonst würdest du es uns nicht verschweigen, aber es wäre mal interessant was du beim Programmstart so alles machst. 
|
|
nooby 
      
Beiträge: 44
Win XP Pro.
D7
|
Verfasst: Di 16.09.03 20:22
Sorry, ist nicht bös gemeint, aber den ganzen Quellcode zu posten finde ich einfach übertrieben. Also, ich habe noch ein bischen probiert und habe folgendes festgestellt.
Das Problem ist definitiv die Funktion GetVolumeInformation. Ich habe Sie in 2 Varianten ausprobiert. A) ich bekomme ich meine SN, das Programm läuft weiter und beim "end;" kommt die Fehlermeldung: "Access Violation at address .... Read of address ..."
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| begin IniDat := TIniFile.Create(ExtractFilePath(paramstr(0))+'handi2dv.ini'); AssignFile(ExportDatei, IniDat.ReadString ('DV_IMPORT','PFAD','')); Rewrite (ExportDatei); if (GetVolumeInformation(pChar('c:\'), nil, 0, ID, dwx, dwy, nil, 0)) then strHDSerial1 := IntToStr(ID^); ...
end; |
oder aber ich benutze folgende Variante und bekomme keine SN. Aber ansonsten läuft das Programm weiter ohne Fehler.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function HDSerialID(drive:Char): string; var ID : PDWord; dwx,dwy : DWord;
begin if GetVolumeInformation(pChar(drive + ':\'), nil, 0, ID, dwx, dwy, nil, 0) then result := IntToStr(ID^) else result := 'Error' end;
begin IniDat := TIniFile.Create(ExtractFilePath(paramstr(0))+'handi2dv.ini'); AssignFile(ExportDatei, IniDat.ReadString ('DV_IMPORT','PFAD','')); Rewrite (ExportDatei); strHDSerial1 := HDSerialID('c'); ... end; |
|
|
UC-Chewie
      
Beiträge: 531
WinXP
D5 Ent
|
Verfasst: Di 16.09.03 20:55
Also, der Fehler ist folgender:
Du übergibst eine Variable vom Typ PDWord. Schön und gut soweit.
Aber: PDWord ist nichts weiteres als ein Zeiger auf einen DWord-Wert. Nun passiert folgendes: Du übergibst diesen Zeiger, der auf irgendeine zufällige Stelle (hängt davon ab, was vorher an der Stelle des Zeigers war) zeigt, und die Funktion schreibt dort die SN hin.
Du willst nun auf diese Stelle zugreifen, aber das darfst du nicht, denn du hättest die Stelle vorher reservieren müssen.
Lösungen:
1. Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var ID: PDWord; begin New(ID); Dispose(ID) end; |
2. Delphi-Quelltext 1: 2: 3: 4: 5:
| var ID: DWord; begin GetVolumeInformation('c:\', nil, 0, @ID, dwx, dwy, nil, 0); end; |
Edit: Dass du im zweiten Fall keine SN zurückkriegst, liegt daran, dass du an die Funktion 'c' übergibst, es müsste allerdings 'C:\' sein.
_________________ Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
|
|
nooby 
      
Beiträge: 44
Win XP Pro.
D7
|
Verfasst: Di 16.09.03 21:07
OK, das PDWord ein Zeiger ist, habe ich nicht mitbekommen. Danke für die Erklärung und die Lösung.
|
|
|